当前位置: 首页 > 知识库问答 >
问题:

如何使用BLE将应用通知从一部android手机传递到另一部android手机

穆修杰
2023-03-14

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

共有2个答案

龚国源
2023-03-14

在做了一些研究之后,我发现我必须使用蓝牙低能量中具有新警报特性的警报通知服务来实现这一点。这样,大多数健身带都会显示来自连接设备的通知。

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

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

应用程序2-BLEGATT服务器-这应该在接收通知的设备上。

按照以下步骤传送通知:

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

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

第一个索引——类别id——定义了警报的类型。检查这里

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

剩余指数-警报数据

然后将值写入New Alert特性

步骤3:在服务器端,在BluetoothGattServerCallback的onCharacteristicWriteRequest()方法中获取数据,并以发送的方式遍历数据。

基于类别ID,警报计数,用接收到的数据创建通知。

例如,如果您想通过BLE发送未接来电通知

步骤1:实现NotificationListenerService类,根据onNotificationPosted()重写方法上的包名和通知标题获取phone/dialer应用程序通知,并获取通知文本(我们希望传递的数据)

第2步:以上述方式创建字节数组。

第一个索引-类别id=4(为未接来电警报保留。有关更多信息,请参阅此)

第二个索引-整数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应用程序。

袁泰平
2023-03-14

BLE通知只能从GATT服务器发送到GATT客户端。换句话说,您将拥有一台作为GATT客户端的Android手机,监听来自多个GATT服务器的通知,其中一台可以是另一台充当GATT服务器的Android手机:-

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

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

  • 终极蓝牙低能耗教程

一旦你读了上面,你可以看到下面的链接,以完成你的原始目标,有两个Android设备之间的通信:-

  • 如何使用Android BLE在设备之间进行通信
  • 在Android上订阅BLE通知
  • Android BLE中央和外围示例
  • Android BLE开发的终极指南
 类似资料:
  • 问题内容: 我有一个包含项目类别的列表视图。当我在列表上按类别标题时,它将显示另一个包含所选类别内项目的列表视图。 我通过使用ListFragment来做到这一点。我是否必须启动一个新活动并按意图一起传递类别ID? 这是我的类别: 我要添加什么以转到“项目列表”?我需要使用另一个ListFragment还是仅使用常规ListActivity? 如何从解析的JSON中检索类别ID并将其传递给列表项?

  • 本文向大家介绍Android手势ImageView三部曲 第一部,包括了Android手势ImageView三部曲 第一部的使用技巧和注意事项,需要的朋友参考一下 这几天一直在研究github上的PhotoView跟GestureImageView,发现写的都很牛,看了很久的代码,于是打算把自己所看的一些东西总结一下,内容还是很多的,但是很有含金量哈~~ 先附上两个开源项目的链接: Gesture

  • 问题内容: 我使用创建了一个react应用。我有一个现有的网页,并且react应用程序按正常方式附加到html页面内的div。 该网页具有一些全局javascript常量,这是React应用程序运行所必需的。有什么办法可以将这些变量传递给react应用吗?结构如下 我正在努力,因为javascript当然在构建阶段会被精简,因此任何声明如下: 由于变量被重写而无法正常工作。我试图偷偷摸摸,并使用e

  • 我的方法中有以下代码作为 现在我在这一行后面有了意图,如下所示: 我不知道如何把这个问题列表从一个activity的意图传递给另一个activity我的问题课

  • 以下术语是什么意思:A2DP、LE、APTX?

  • 问题内容: 我正在尝试从一个发送客户类的对象,Activity然后在另一个对象中显示它Activity。 客户类的代码: 我想将其对象从一个对象发送Activity到另一个对象,然后在另一个对象上显示数据Activity。 我该如何实现? 问题答案: 一种选择是让你的自定义类实现该接口,然后可以使用该方法的变体在意图中额外传递对象实例。 伪代码: