【问题标题】:How to pass apps notification from one android phone to another android phone using BLE如何使用BLE将应用程序通知从一部Android手机传递到另一部Android手机
【发布时间】:2021-07-28 02:53:11
【问题描述】:

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

【问题讨论】:

    标签: android bluetooth bluetooth-lowenergy android-bluetooth


    【解决方案1】:

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

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

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

    阅读以上内容后,您可以查看以下链接以实现您在两台 Android 设备之间进行通信的最初目标:-

    【讨论】:

    • 我认为问题是关于 Android 应用通知,而不是 BLE 通知。但我不知道 Android 上的标准化方式,因此您的链接可能仍然有用。
    • 啊,好点,我完全错过了这部分。我认为答案仍然成立,并且上面的链接可用于实现问题的目标。
    • 这确实是一个很好的答案
    • @YoussifSaeed 您确定(服务器:发送;客户端:读取)可行吗?我目前正在开发一个与之相反的应用程序,但通过新的分析,事实证明我们也需要服务器来向客户端发送数据。
    【解决方案2】:

    在做了一些研究之后,我发现我必须使用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 应用程序。

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多