Untitled
// 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