Нужна помощь в выяснении того, как успешно общаться с помощью простой кнопки Bluetooth Ble через UUID.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Нужна помощь в выяснении того, как успешно общаться с помощью простой кнопки Bluetooth Ble через UUID.

Сообщение Anonymous »

Сейчас я работаю над приложением, которому требуется простая связь между кнопкой Bluetooth (по сути, кнопкой для селфи) и подключенным телефоном через приложение. Теперь я могу нормально подключаться к своему телефону, и он работает так, как задумано, но как только я хочу добиться этого общения с помощью кода, у меня возникают проблемы. Я обнаружил устройства и могу подключиться через их Mac-адрес. Это устройство безымянного бренда, поэтому документации по UUIDS нет, но я использовал приложения ble, чтобы найти нужные мне UUIDS или, по крайней мере, те, которые, по моему мнению, мне нужны. Это мой текущий код, когда устройство «щелкают» в списке устройств. Я новичок в этом, поэтому могу ошибаться, но в основном я пытаюсь активировать уведомление, записывая UUID человеческого интерфейса (при нажатии физической кнопки), чтобы позже я мог получать уведомления при нажатии кнопки, чтобы использовать их для своего приложения. Я пробую это потому что простая попытка связаться с UUID соответствующего уведомления пока не сработала. Вся часть уведомлений о настройке еще не работает. Было бы благословением, если бы кто-нибудь смог мне здесь помочь. Заранее спасибо, ребята.

Код: Выделить всё

    package com.example.androidcounterapp

import android.annotation.SuppressLint
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothGattDescriptor
import android.content.ContentValues.TAG
import android.content.Context
import android.util.Log
import com.polidea.rxandroidble3.RxBleClient
import com.polidea.rxandroidble3.RxBleDevice
import io.reactivex.rxjava3.disposables.Disposable
import java.util.UUID

class BluetoothConnection {

val serviceUuidUUID = UUID.fromString("00001812-0000-1000-8000-00805f9b34fb")
val characteristicUUID = UUID.fromString("00002a4d-0000-1000-8000-00805f9b34fb")
val cccdUUID = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")

inner class ConnectThread(
private val context: Context,
private val macAddress: String,
private val bluetoothAdapter: BluetoothAdapter
) : Thread() {

private val rxBleClient: RxBleClient by lazy(LazyThreadSafetyMode.NONE) {
RxBleClient.create(context)
}

private var connectionDisposable: Disposable? = null

@SuppressLint("MissingPermission")
private fun connectAndSetupNotification(
device: RxBleDevice,
characteristicUUID: UUID,
cccdUUID: UUID,
) {

Log.i(TAG, "Entered connectAndSetupNotification")

connectionDisposable = device.establishConnection(false)
.flatMap { rxBleConnection ->

Log.i(TAG, "GATT connection established")

rxBleConnection.setupNotification(characteristicUUID)
.flatMap { notificationObservable ->
val enableNotificationValue = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
val descriptor = BluetoothGattDescriptor(
cccdUUID,
BluetoothGattDescriptor.PERMISSION_WRITE
).apply {
value = enableNotificationValue
}

rxBleConnection.writeDescriptor(descriptor, enableNotificationValue)
.andThen(notificationObservable)
}
}
.subscribe(
{ notificationData ->
Log.i(TAG, "Notification data: ${notificationData.joinToString(", ")}")
val readableValue = CharacteristicConverter.convert(notificationData)
Log.i(TAG, "Readable value: $readableValue")
},
{ throwable ->
Log.e(TAG, "Error occurred while setting up notification", throwable)
}
)
}

@SuppressLint("MissingPermission")
override fun run() {

bluetoothAdapter.cancelDiscovery()
Log.i(TAG, "Trying to connect")
val device = rxBleClient.getBleDevice(macAddress)
connectAndSetupNotification(device, characteristicUUID, cccdUUID)
}

fun cancel() {
connectionDisposable?.dispose()
}
}
}

Я пытался связаться практически со всеми UUID, которые приложение Bluetooth ble связало с моим кнопочным устройством, но безрезультатно. Поэтому моя последняя надежда состоит в том, что уведомление нужно включить для работы и что я не наблюдаю за чем-то большим.

Подробнее здесь: https://stackoverflow.com/questions/786 ... etooth-ble
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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