From 89a0671cffa0a29fbdb28b0310c476a41319df1f Mon Sep 17 00:00:00 2001 From: lash21 Date: Mon, 2 Nov 2026 08:13:55 +0100 Subject: [PATCH] bluetooth check and enabling --- .../smart_watch_android/BLE/BleManager.kt | 4 +-- .../smart_watch_android/MainActivity.kt | 16 ++++++++++++ .../Screens/ConnectScreen.kt | 26 ++++++++----------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/example/smart_watch_android/BLE/BleManager.kt b/app/src/main/java/com/example/smart_watch_android/BLE/BleManager.kt index 8387f48..6bde287 100644 --- a/app/src/main/java/com/example/smart_watch_android/BLE/BleManager.kt +++ b/app/src/main/java/com/example/smart_watch_android/BLE/BleManager.kt @@ -18,6 +18,7 @@ import androidx.annotation.RequiresApi import androidx.annotation.RequiresPermission import androidx.compose.ui.platform.LocalContext import androidx.core.app.ActivityCompat +import androidx.core.app.ActivityCompat.startActivityForResult import com.example.smart_watch_android.MainViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -40,7 +41,7 @@ object BLEManager{ private val deviceUUIDs = DeviceUUIDs private var bluetoothGatt: BluetoothGatt? = null private lateinit var bluetoothManager: BluetoothManager - private lateinit var bluetoothAdapter: BluetoothAdapter + lateinit var bluetoothAdapter: BluetoothAdapter val gattCallback = object : BluetoothGattCallback() { @RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT) override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) { @@ -108,7 +109,6 @@ object BLEManager{ } if (missingPermissions.isNotEmpty()) { - // Berechtigungen anfordern ActivityCompat.requestPermissions(activity, missingPermissions.toTypedArray(), 101) } else { Log.d("ESP32_BLE", "Alle Bluetooth-Berechtigungen sind bereits erteilt!") diff --git a/app/src/main/java/com/example/smart_watch_android/MainActivity.kt b/app/src/main/java/com/example/smart_watch_android/MainActivity.kt index 7d46369..456415c 100644 --- a/app/src/main/java/com/example/smart_watch_android/MainActivity.kt +++ b/app/src/main/java/com/example/smart_watch_android/MainActivity.kt @@ -1,11 +1,15 @@ package com.example.smart_watch_android import android.Manifest +import android.bluetooth.BluetoothAdapter +import android.content.Intent import android.os.Build import android.os.Bundle +import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge +import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.annotation.RequiresApi import androidx.annotation.RequiresPermission @@ -17,12 +21,24 @@ import com.example.smart_watch_android.BLE.BLEManager import com.example.smart_watch_android.Screens.AppNavigation class MainActivity : ComponentActivity() { + private val enableBluetoothLauncher = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { result -> + if (result.resultCode == RESULT_OK) { + Log.d("BLE_","Bluetooth enabled") + } + } private val viewModel: MainViewModel by viewModels() @RequiresApi(Build.VERSION_CODES.S) @RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT) override fun onCreate(savedInstanceState: Bundle?,) { super.onCreate(savedInstanceState) BLEManager.init(context = applicationContext, activity = this) + val adapter = BLEManager.bluetoothAdapter + if (!adapter.isEnabled) { + val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE) + enableBluetoothLauncher.launch(enableBtIntent) + } enableEdgeToEdge() setContent { MaterialTheme { diff --git a/app/src/main/java/com/example/smart_watch_android/Screens/ConnectScreen.kt b/app/src/main/java/com/example/smart_watch_android/Screens/ConnectScreen.kt index 9481a93..c808351 100644 --- a/app/src/main/java/com/example/smart_watch_android/Screens/ConnectScreen.kt +++ b/app/src/main/java/com/example/smart_watch_android/Screens/ConnectScreen.kt @@ -62,10 +62,6 @@ fun ConnectScreen(viewModel: MainViewModel) { horizontalAlignment = Alignment.CenterHorizontally ) { - Box( - ){ - Text("if the list is empty ensure you have bluetooth enabled!") - } Box( modifier = Modifier .padding(16.dp) @@ -100,16 +96,16 @@ fun ConnectScreen(viewModel: MainViewModel) { Spacer(modifier = Modifier.height(64.dp)) - Button( - modifier = dynamicModifier, - onClick = {BLEManager.connectToEsp32(context, viewModel.selectedDeviceAddress) }, - shape = CircleShape, - colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF5E18BE)) - ) { - Text( - text = "Connect", - fontSize = 32.sp - ) - } + Button( + modifier = dynamicModifier, + onClick = {BLEManager.connectToEsp32(context, viewModel.selectedDeviceAddress) }, + shape = CircleShape, + colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF5E18BE)) + ) { + Text( + text = "Connect", + fontSize = 32.sp + ) + } } } \ No newline at end of file