在做了一些研究之后,我发现我必须使用Alert Notification Service 和蓝牙低功耗中的新警报特性来实现这一点。
这样,大多数健身手环都会显示来自连接设备的通知。
您必须创建两个 Android 应用。
应用 1 - BLE GATT 客户端 - 这应该在发送通知的设备上。
应用 2 - BLE GATT 服务器 - 这应该在接收通知的设备上。
按照以下步骤传输您的通知:
第 1 步:在客户端应用中使用NotificationListernerService 获取您的设备通知数据。
第 2 步:创建一个字节数组以通过以下方式写入新警报特征
第一个索引 - 类别 ID - 定义警报的类型。检查here
第二个索引 - 警报计数 - 警报数
剩余索引 - 警报数据
然后将值写入新警报特征
第三步:在Server端,在BluetoothGattServerCallback的onCharacteristicWriteRequest()方法中获取数据,按照你发送的方式遍历数据。
基于类别 id、警报计数、Create Notification 和接收到的数据。
例如,如果您想通过 BLE 发送未接来电通知
第一步: 实现 NotificationListenerService 类,在 onNotificationPosted() 重写方法上根据包名和通知标题获取电话/拨号应用通知,并获取通知文本(我们想要的数据通过)
第二步:按照上面提到的方式创建一个字节数组。
第一个索引 - 类别 id = 4(保留用于未接来电提醒。请参阅 this 了解更多信息)
第二个索引 - 以字节为单位的整数 1 值(我们只发送单个警报)。
剩余索引-上一步得到的数据。(确保将字符串转换为字节数组)
val MISSED_CALl_CATEGORY_ID = 4
private fun createNewAlertCharacteristicData(text: String): ByteArray {
val categoryId = MISSED_CALl_CATEGORY_ID.toByte()
val count = 1.toByte()
val info = ByteArray(2)
info[0] = categoryId
info[1] = count
val data = text.toByteArray()
return info + data
}
第 3 步:在服务器端,根据类别 id,为接收到的数据创建通知。
通过这种方式,您可以轻松传递任何通知。这就是健身手环等智能设备显示已连接设备通知的方式。
请参考之前的答案以了解 Android BLE 基础知识并了解如何开发我未在此处介绍的 BLE 应用程序。