如何使用 BLE 将应用通知从一个 android phone 传递到另一个 android phone

How to pass apps notification from one android phone to another android phone using BLE

我正在尝试使用 android 将应用程序通知从一台 android 设备传递到另一台 android 设备 BLE.So 接收通知的设备将是 GATT 服务器(因此可以从许多客户端接收通知,但一次只能接收一个)并且设备将发送通知将是 GATT 客户端?我对传递应用程序通知有点困惑,不知道该怎么做。还建议我可以使用除 BLE 之外的任何其他好的选项。

BLE 通知只能从 GATT 服务器发送到 GATT 客户端。换句话说,您将有一个 Android phone 作为 GATT 客户端,侦听来自多个 GATT 服务器的通知,其中一个可以是另一个 Android phone 作为关贸总协定服务器:-

  • Android 设备 #1 上的应用程序 A:充当 GATT 服务器 的应用程序来托管您要发送的数据。为此,您需要 GATT Server API。然后您可以通过 BLE 通知发送此数据。
  • Android 设备 #2 上的应用程序 B:充当 GATT 客户端的应用程序 连接到设备 #1 并从 GATT 服务器读取字符串数据使用 GATT Client API.

我建议学习一些蓝牙基础知识,因为它可以帮助您开发应用程序:-

阅读以上内容后,您可以查看下面的链接来完成您最初的 objective 在两个 Android 设备之间进行通信:-

经过一些研究,我发现我必须使用 Alert Notification Service 和蓝牙低功耗中的新警报特性来实现这一点。 这样大多数健身手环都会显示来自已连接设备的通知。

您必须创建两个 Android 应用程序。

应用程序 1 - BLE GATT 客户端 - 这应该在发送通知的设备上。

App 2 - BLE GATT 服务器 - 这应该在接收通知的设备上。

按照以下步骤传输您的通知:

第 1 步:在客户端应用程序中使用 NotificationListernerService 获取您的设备通知数据。

步骤 2 :创建一个字节数组以通过以下方式写入新警报特征

第一个索引 - 类别 ID - 定义警报的类型。检查 here

第二个索引 - 警报计数 - 警报数

剩余指数 - 警报数据

然后将值写入新警报特征

第三步:在Server端,在BluetoothGattServerCallback的onCharacteristicWriteRequest()方法中获取数据,按照你发送的方式遍历。

基于类别 ID、警报计数,Create Notification 与接收到的数据。

比如你想通过BLE发送未接来电通知

第 1 步: 实现 NotificationListenerService class,在 onNotificationPosted() 覆盖方法上根据包名称和通知标题获取 phone/dialer 应用通知并获取通知文本(我们要传递的数据)

第二步:按上述方式创建字节数组

第一个索引 - 类别 ID = 4(为未接来电提醒保留。有关详细信息,请参阅 this

第二个索引 - 以字节为单位的整数 1 值(我们只发送单个警报)。

remaining index - 上一步得到的数据。(确保将字符串转换为字节数组)

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
}

第三步:在服务器端,根据类别id,为接收到的数据创建通知。

通过这种方式,您可以轻松传递任何通知。这就是健身手环等智能设备显示已连接设备通知的方式。

请参阅之前的回答以了解 Android BLE 基础知识,并了解如何开发我未在此处介绍的 BLE 应用程序。