Приложение Android LED Control не запускается при включенном BluetoothAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение Android LED Control не запускается при включенном Bluetooth

Сообщение Anonymous »


Я разрабатываю приложение для удаленного управления светодиодом через Bluetooth с помощью Android Studio для Android версии 13.

Если Bluetooth включен на телефоне до запуска приложения, приложение сразу же аварийно завершает работу. Если у вас есть предположения, почему я могу получить эту ошибку, дайте мне знать!

В файле AndroidManifest.xml я объявил разрешения для BLUETOOTH, BLUETOOTH_ADMIN и BLUETOOTH_CONNECT следующим образом:

Пользовательский интерфейс имеет простой текстовый вид, а также кнопки «ВКЛ» и «ВЫКЛ», определенные в файле Activity_main.xml, как показано ниже:

Затем в MainActivity.kt я отображаю макет, описанный выше, и пытаюсь запросить разрешения Bluetooth, как показано ниже:

пакет com.example.ledcontrol импортировать android.util.Log импортировать android.Manifest импортировать android.bluetooth.BluetoothAdapter импортировать android.bluetooth.BluetoothDevice импортировать android.bluetooth.BluetoothSocket импортировать android.content.pm.PackageManager импортировать android.os.Bundle импортировать android.widget.Button импортировать android.widget.Toast импортировать androidx.activity.ComponentActivity импортировать androidx.activity.compose.setContent импортировать androidx.compose.foundation.layout.fillMaxSize импортировать androidx.compose.material3.MaterialTheme импортировать androidx.compose.material3.Surface импортировать androidx.compose.material3.Text импортировать androidx.compose.runtime.Composable импортировать androidx.compose.ui.Modifier импортировать androidx.compose.ui.tooling.preview.Preview импортировать androidx.core.app.ActivityCompat импортировать com.example.ledcontrol.ui.theme.LEDControlTheme импортировать java.io.OutputStream импортировать java.util.* класс MainActivity : ComponentActivity() { частный val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter() частный вар bluetoothSocket: BluetoothSocket? = ноль частный var outputStream: OutputStream? = ноль частный запрос valBluetoothPermission = 1 Private val esp32DeviceAddress = "08:d1:f9:ce:b1:9e" // Адрес устройства Bluetooth ESP32 переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView (R.layout.activity_main) если (BluetoothAdapter != ноль && bluetoothAdapter.isEnabled) { // Проверяем, предоставлены ли разрешения Bluetooth если (ActivityCompat.checkSelfPermission( этот, Манифест.разрешение.BLUETOOTH ) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( этот, Манифест.permission.BLUETOOTH_ADMIN ) == PackageManager.PERMISSION_GRANTED ) { // Разрешения предоставлены, продолжаем операции Bluetooth val устройство = bluetoothAdapter.getRemoteDevice(esp32DeviceAddress) настройкаBluetoothConnection (устройство) } еще { // Запрос разрешений Bluetooth ActivityCompat.requestPermissions( этот, массивOf( Манифест.разрешение.BLUETOOTH, Манифест.permission.BLUETOOTH_ADMIN ), запрос разрешения Bluetooth ) } } val onButton = findViewById(R.id.onButton) val offButton = findViewById(R.id.offButton) onButton.setOnClickListener { ОтправитьДанные("1") Log.d("ButtonPress", "Нажата кнопка включения") } offButton.setOnClickListener { ОтправитьДанные("0") Log.d("ButtonPress", "Нажата кнопка выключения") } } личное развлечение setupBluetoothConnection (устройство: BluetoothDevice) { // Инициализируем соединение Bluetooth пытаться { если (ActivityCompat.checkSelfPermission( этот, Манифест.permission.BLUETOOTH_CONNECT ) != PackageManager.PERMISSION_GRANTED ) { возвращаться } bluetoothSocket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")) bluetoothSocket?.connect() выходной поток = bluetoothSocket?.outputStream } catch (e: Exception) { е.printStackTrace() } } // Функция для отправки данных через Bluetooth личное развлечение sendData (данные: String) { Log.d("Info", "sendData вызывается с данными: $data") пытаться { выходной поток?.write(data.toByteArray()) // Регистрируем сообщение, указывающее, что данные были отправлены Log.d("Bluetooth", "Отправленные данные: $data") } catch (e: Exception) { е.printStackTrace() // Зарегистрируем сообщение об ошибке, если возникла проблема с отправкой данных Log.e("Bluetooth", "Ошибка отправки данных: ${e.message}") } } переопределить удовольствие onDestroy() { супер.onDestroy() // Закрываем сокет Bluetooth и выходной поток, когда активность уничтожается пытаться { выходной поток?.close() bluetoothSocket?.close() } catch (e: Exception) { е.printStackTrace() } } } При нажатии кнопок в пользовательском интерфейсе вызывается метод sendData, и журналы печатаются, как и ожидалось, но похоже, что возникла проблема с реализацией Bluetooth.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»