Android 4.2
unknown
plain_text
9 months ago
19 kB
6
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";
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();
sendDataToArduino("song.1");
break;
case R.id.song2:
Toast.makeText(MainActivity.this, "Song 2 selected", Toast.LENGTH_SHORT).show();
sendDataToArduino("song.2");
break;
case R.id.song3:
Toast.makeText(MainActivity.this, "Song 3 selected", Toast.LENGTH_SHORT).show();
sendDataToArduino("song.3");
break;
case R.id.song4:
Toast.makeText(MainActivity.this, "Song 4 selected", Toast.LENGTH_SHORT).show();
sendDataToArduino("song.4");
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("Dlhý, Široký a Bystrozraký"));
playB.setVisibility(View.INVISIBLE);
pauseB.setVisibility(View.VISIBLE);
is_playing = true;
break;
case "2":
runOnUiThread(() -> textViewData.setText("Cisárove nové šaty"));
playB.setVisibility(View.INVISIBLE);
pauseB.setVisibility(View.VISIBLE);
is_playing = true;
break;
case "3":
runOnUiThread(() -> textViewData.setText("Hrnček, var!"));
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;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
decreaseVolume(); // Zníženie hlasitosti
return true;
}
return super.onKeyDown(keyCode, event);
}
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");
}
}
}
Editor is loading...
Leave a Comment