【问题标题】:Detect nearby presence of Android Device via Bluetooth通过蓝牙检测附近是否存在 Android 设备
【发布时间】:2016-03-12 09:43:19
【问题描述】:

安装在 2 个彼此靠近的设备上的应用程序是否有任何智能方法可以通过蓝牙识别自己而无需向用户询问任何内容? 请注意,我不是在谈论传输数据或任何其他操作,我只是想(确定地)知道这个特定设备离我很近(例如,一个简单的共享 ID 或硬件地址就足够了)。

重要:它必须从Android 4.4到Android 6,所以这意味着:

  1. 我们不能依赖 BluetoothLeAdvertiser,因为它仅来自 API 21。
  2. 我们不能依赖蓝牙适配器 Mac 地址识别,因为 API 23 中的 it is now broken and randomized。

【问题讨论】:

    标签: android bluetooth bluetooth-lowenergy android-bluetooth


    【解决方案1】:

    Android API 21 添加了 Periphal Bluetooth Low Energy Profile,以便 Android 设备可以充当信标或提供完全正常工作的 Gatt 服务器。

    以下列表提供了与硬件兼容的设备(这是相当有限的)-> https://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html

    所以恐怕现在在 KitKat 的 LE 中有这样做的方法。

    而且由于设备列表非常小,而且从 Jelly Bean 和 KitKat(如三星 Galaxy Note 3)返回的许多启用 LE 设备无法在硬件级别上进行广告宣传,因此这对您来说效果不佳。

    【讨论】:

    • 感谢您的反馈。事实上,我们似乎不得不忘记使用蓝牙 LE。另一种方法是发现任何蓝牙外围设备(经典方式,没有 LE)......在 Android M 打破它之前这是可能的:有什么技巧可以规避 API 23 随机化手机广告的 MacAddress 的事实吗?
    • @JBA 很好奇。我认为 Mac 地址的随机化仅在 LE 中,并且从 API 21 开始,如下所述:stackoverflow.com/questions/30975466/…。我相信经典蓝牙中不是这种情况,否则它会破坏经典蓝牙配对的目的,而在 LE 中则不需要配对:)
    • 你说得对,这很奇怪......可能有一些我没有注意到的微妙细节,因为documentation 对 BT classic / BT LE 不是很清楚......我会的在我的设备上进行一些测试,稍后再返回结果...
    • 我刚刚尝试使用 Marshmallow,BluetoothAdapter.getAddress() 返回文档中提到的常量 02:00:00:00:00:00 ... 所以确实无法获得 Android -M 手机蓝牙Mac地址...
    • here 解释了以用户为中心的解决方法...而其他一些则依赖于 so answer 中的反射 - 看起来后者确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多