Untitled

 avatar
unknown
plain_text
a month ago
19 kB
3
Indexable
// MainActivity.java
package com.example.bluetoothapp;

import android.app.Dialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import com.google.android.material.navigation.NavigationView;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;

public class MainActivity extends AppCompatActivity {

    private static final String HC_05_MAC_ADDRESS = "00:23:00:00:EF:C9"; // Nahradiť MAC adresou vášho HC-05
    private static final UUID HC_05_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

    private BluetoothAdapter bluetoothAdapter;
    private BluetoothSocket bluetoothSocket;
    private InputStream inputStream;
    private OutputStream outputStream;

    private TextView textViewData;

    private DrawerLayout drawerLayout;
    private NavigationView navigationView;
    private ActionBarDrawerToggle drawerToggle;
    private boolean is_playing = false;
    private ImageButton playB;
    private ImageButton pauseB;
    private SeekBar volumeSeekBar;
    private AudioManager audioManager;
    private int volume;

    AtomicBoolean auto = new AtomicBoolean(false);

    private Handler handler = new Handler();

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if (drawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        updateTime();

        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                updateTime();
                handler.postDelayed(this, 60000);
            }
        }, 60000);

        drawerLayout = findViewById(R.id.drawer_layout);
        navigationView = findViewById(R.id.nav_view);
        textViewData = findViewById(R.id.textView2);

        playB = findViewById(R.id.playButton);
        pauseB = findViewById(R.id.pauseButton);

        volumeSeekBar = findViewById(R.id.volume);
        audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

        volumeSeekBar.setMax(30);
        volumeSeekBar.setProgress(16);

        volumeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                System.out.println(volumeSeekBar.getProgress());
                int volume = volumeSeekBar.getProgress();
                sendDataToArduino("song.volume." + volume + "\n");
            }
        });

        navigationView.bringToFront();
        drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open, R.string.close);
        drawerLayout.addDrawerListener(drawerToggle);
        drawerToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.led:
                        showDialogRGB();
                        break;
                    case R.id.song1:
                        Toast.makeText(MainActivity.this, "Song 1 selected", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.song2:
                        Toast.makeText(MainActivity.this, "Song 2 selected", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.song3:
                        Toast.makeText(MainActivity.this, "Song 3 selected", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.song4:
                        Toast.makeText(MainActivity.this, "Song 4 selected", Toast.LENGTH_SHORT).show();
                        break;
                }
                return false;
            }
        });

        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        if (bluetoothAdapter == null) {
            Toast.makeText(this, "Bluetooth nie je dostupné na tomto zariadení", Toast.LENGTH_LONG).show();
            finish();
        }

        if (!bluetoothAdapter.isEnabled()) {
            Toast.makeText(this, "Zapnite Bluetooth", Toast.LENGTH_SHORT).show();

            return;
        }

        connectToHC05();
    }

    // ------------------------------------------------------------------------------------------------------------------------------------------

    private void connectToHC05() {
        try {
            BluetoothDevice device = bluetoothAdapter.getRemoteDevice(HC_05_MAC_ADDRESS);
            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            bluetoothSocket = device.createRfcommSocketToServiceRecord(HC_05_UUID);
            bluetoothSocket.connect();

            inputStream = bluetoothSocket.getInputStream();
            outputStream = bluetoothSocket.getOutputStream();

            Toast.makeText(this, "Pripojené k HC-05", Toast.LENGTH_SHORT).show();

            readData();

        } catch (Exception e) {
            // Toast.makeText(this, "Nepodarilo sa pripojiť k HC-05", Toast.LENGTH_SHORT).show();
            showDialogBt();
            e.printStackTrace();
        }
    }

    private void readData() {
        new Thread(() -> {
            byte[] buffer = new byte[1024];
            int bytes;

            while (true) {
                try {
                    if (inputStream != null) {
                        bytes = inputStream.read(buffer);
                        final String receivedData = new String(buffer, 0, bytes);
                        System.out.println(receivedData);
                        handleReceivedData(receivedData);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    break;
                }
            }
        }).start();
    }

    private void handleReceivedData(String data) {
        String[] parts = data.split("\\.");

        if (parts.length > 0) {
            String command = parts[0];

            switch (command) {
                case "song":
                    handleSongCommand(parts);
                    break;
                case "temperature":
                    handleTemperatureCommand(parts);
                    break;
                case "led":
                    handleLedCommand(parts);
                default:
                    runOnUiThread(() -> textViewData.setText("Neznámy príkaz: " + command));
                    break;
            }
        } else {
            runOnUiThread(() -> textViewData.setText("Neplatné dáta: " + data));
        }
    }

    private void handleLedCommand(String[] parts) {
        if (parts.length > 1) {
            String value = parts[1];
            switch (value) {
                case "autoTrue":
                    auto.set(true);
                    break;
                case "autoFalse":
                    auto.set(false);
                    break;
            }
        }
    }

    private void handleSongCommand(String[] parts) {
        if (parts.length > 1) {
            String action = parts[1];

            switch (action) {
                case "1":
                    runOnUiThread(() -> textViewData.setText("SONG 1"));
                    playB.setVisibility(View.INVISIBLE);
                    pauseB.setVisibility(View.VISIBLE);
                    is_playing = true;
                    break;
                case "2":
                    runOnUiThread(() -> textViewData.setText("SONG 2"));
                    playB.setVisibility(View.INVISIBLE);
                    pauseB.setVisibility(View.VISIBLE);
                    is_playing = true;
                    break;
                case "3":
                    runOnUiThread(() -> textViewData.setText("SONG 3"));
                    playB.setVisibility(View.INVISIBLE);
                    pauseB.setVisibility(View.VISIBLE);
                    is_playing = true;
                    break;
                case "play":
                    runOnUiThread(() -> textViewData.setText("SONG Play"));
                    playB.setVisibility(View.INVISIBLE);
                    pauseB.setVisibility(View.VISIBLE);
                    is_playing = true;
                    break;
                case "pause":
                    runOnUiThread(() -> textViewData.setText("SONG Pause"));
                    playB.setVisibility(View.VISIBLE);
                    pauseB.setVisibility(View.INVISIBLE);
                    is_playing = false;
                    break;
                default:
                    runOnUiThread(() -> textViewData.setText("Neznáma akcia pre song: " + action));
                    break;
            }
        } else {
            runOnUiThread(() -> textViewData.setText("Príkaz pre 'song' je neúplný"));
        }
    }


    private void handleTemperatureCommand(String[] parts) {
        if (parts.length > 1) {
            String value = parts[1];
            runOnUiThread(() -> textViewData.setText("Teplota: " + value + "°C"));
        } else {
            runOnUiThread(() -> textViewData.setText("Hodnota teploty nie je špecifikovaná"));
        }
    }

    private void sendDataToArduino(String data) {
        if (bluetoothSocket != null) {
            try {
                bluetoothSocket.getOutputStream().write(data.getBytes());
                Toast.makeText(this, "Data sent: " + data, Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                Toast.makeText(this, "Failed to send data", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        } else {
            Toast.makeText(this, "Bluetooth is not connected", Toast.LENGTH_SHORT).show();
        }
    }


    private void showDialogRGB() {
        Dialog dialog = new Dialog(this);
        dialog.setContentView(R.layout.dialog_layout);
        dialog.getWindow().setBackgroundDrawableResource(R.drawable.shape_blue);

        SeekBar seekBarRed = dialog.findViewById(R.id.seekBarRed);
        SeekBar seekBarGreen = dialog.findViewById(R.id.seekBarGreen);
        SeekBar seekBarBlue = dialog.findViewById(R.id.seekBarBlue);

        Button buttonOn = dialog.findViewById(R.id.button_on);
        Button buttonOff = dialog.findViewById(R.id.button_off);
        Button buttonAuto = dialog.findViewById(R.id.button_auto);


        // Nastavenie listenerov pre každý SeekBar
        seekBarRed.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                int progress = seekBar.getProgress();
                sendDataToArduino("LED.RED." + progress + "\n");
            }
        });

        seekBarGreen.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                int progress = seekBar.getProgress();
                sendDataToArduino("LED.GREEN." + progress + "\n");
            }
        });

        seekBarBlue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                int progress = seekBar.getProgress();
                sendDataToArduino("LED.BLUE." + progress + "\n");
            }
        });

        // Nastavenie listenerov pre tlačidlá
        buttonOn.setOnClickListener(v -> {
            sendDataToArduino("LED.ON");
            Toast.makeText(MainActivity.this, "LED zapnuté", Toast.LENGTH_SHORT).show();
        });

        buttonOff.setOnClickListener(v -> {
            sendDataToArduino("LED.OFF");
            Toast.makeText(MainActivity.this, "LED vypnuté", Toast.LENGTH_SHORT).show();
        });

        buttonAuto.setOnClickListener(v -> {
            sendDataToArduino("LED.AUTO");
            if (!auto.get()){
            Toast.makeText(MainActivity.this, "Automatický režim", Toast.LENGTH_SHORT).show();
            auto.set(true);
            }
            else {
                Toast.makeText(MainActivity.this, "Automatický režim", Toast.LENGTH_SHORT).show();
                auto.set(false);
            }

        });

        dialog.show();
    }

    private void showDialogBt(){
        Dialog dialog = new Dialog(this);
        dialog.setContentView(R.layout.dialog_bt);
        dialog.getWindow().setBackgroundDrawableResource(R.drawable.shape_blue);
        Button buttonOk = dialog.findViewById(R.id.button_ok);

        buttonOk.setOnClickListener(view -> {
            if (bluetoothAdapter.isEnabled()) {
                dialog.dismiss();
                Toast.makeText(MainActivity.this, "Je potreba reštartovať aplikáciu", Toast.LENGTH_SHORT).show();
            }
            if (!bluetoothAdapter.isEnabled()) {
                Toast.makeText(MainActivity.this, "Zapnite bluetooth", Toast.LENGTH_SHORT).show();
            }
        });

        dialog.show();
    }

    @Override
    public void onBackPressed() {
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        try {
            if (bluetoothSocket != null) bluetoothSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        handler.removeCallbacksAndMessages(null);
    }

    @Override
    protected void onResume() {
        super.onResume();
        updateTime();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                updateTime();
                handler.postDelayed(this, 60000);
            }
        }, 60000);
    }

    public void play(View view) {
        playB.setVisibility(View.INVISIBLE);
        pauseB.setVisibility(View.VISIBLE);
        is_playing = true;
        sendDataToArduino("PLAY");
    }

    public void pause(View view) {
        playB.setVisibility(View.VISIBLE);
        pauseB.setVisibility(View.INVISIBLE);
        is_playing = false;
        sendDataToArduino("PAUSE");
    }

    private void updateTime() {
        TextView timeView = findViewById(R.id.timeView);
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.getDefault());
        String currentTime = sdf.format(new Date());
        timeView.setText(currentTime);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            increaseVolume(); // Zvýšenie hlasitosti
            return true; // Indikujeme, že sme stlačenie spracovali
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
            decreaseVolume(); // Zníženie hlasitosti
            return true; // Indikujeme, že sme stlačenie spracovali
        }
        return super.onKeyDown(keyCode, event); // Nechajte systém spracovať ostatné tlačidlá
    }

    private void increaseVolume() {
        int currentVolume = volumeSeekBar.getProgress();
        if (currentVolume < volumeSeekBar.getMax()) {
            volumeSeekBar.setProgress(currentVolume + 2);
            volume = volumeSeekBar.getProgress();
            sendDataToArduino("song.volume." + volume + "\n");
        }
    }

    private void decreaseVolume() {
        int currentVolume = volumeSeekBar.getProgress();
        if (currentVolume > 0) {
            volumeSeekBar.setProgress(currentVolume - 2);
            volume = volumeSeekBar.getProgress();
            sendDataToArduino("song.volume." + volume + "\n");
        }
    }


}
Leave a Comment