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

Android蓝牙低能耗-iBeacon

卫才
2023-03-14

最近,我买了一台iBeacon设备,打算创建Android应用程序,以便识别和使用它。我是一个在Android应用程序中使用蓝牙的新手,有很多事情我还不知道。在互联网和本论坛中,我找到了使用Radius Networks的Android IBeacon库的建议,但是,唉,现在它不再可用了:

https://github.com/RadiusNetworks/android-ibeacon-service

因此,我开始使用Android开发者指南中关于蓝牙低能耗的代码:https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

使用此代码,我可以检测设备,甚至连接到它,但我不知道如何获取接近度Uuid以及主要值和次要值:应用程序显示了大量来自服务和设备特性的Uuid,但没有一个是设备的接近度Uuid。

任何人都可以告诉我如何使用Android Bluetooth LE API获取这些数据,或者帮助我获取Radius Networks针对Eclipse的Android iBeacon库和使用指南,或者显示如何使用它的示例?

谢谢你。

共有3个答案

郗欣嘉
2023-03-14

RadiusNetworks结合新的跨平台信标接近规范“重新发布”了库和示例

新的AltBeacon标准允许跨平台接近应用程序

查看altbeacon。组织。

易昌翰
2023-03-14

以下两个是完全不同的东西,尽管它们都被称为UUID。

  • 托管在BLE外围设备上的GATT服务的UUID。
  • 接近UUIDiBeacon。

关于“关贸总协定服务的UUID”,您应该了解:

  1. BLE外围设备可以实现GATT服务器。
  2. GATT服务器托管GATT服务。
  3. APIandroid.bluetooth.BluetoothGatt.getServices()返回的是GATT服务列表(List

你应该知道什么"接近UUID的iBeacon":

  1. 编程外围设备广播广告包
  2. 广告包的有效负载部分包含广告结构的列表
  3. AD结构由(1)长度(1字节),(2)AD类型(1字节)和(3)AD数据组成。广告结构格式见“蓝牙核心规范4.2”中的“11广告和扫描响应数据格式”
  4. iBeacon是一种AD结构
  5. iBeacon的AD类型为0xFF(表示特定于制造商的数据)
  6. iBeacon的AD数据的前4个字节是0x4C、0x00、0x02和0x15。前2个字节(0x4C,0x00)表示“苹果公司”,下2个字节(0x02,0x15)表示“iBeacon格式
  7. 接近UUID(16字节)、主数字(大端字节中的2字节)、次数字(大端字节中的2字节)和电源(1字节)紧跟在前4个字节之后

因此,要获得iBeacon信息(接近度UUID、major、minor、power),您必须做如下操作。

  1. 将广告包的有效载荷解析为AD结构列表。
  2. 对于每个AD结构,检查AD Type是否为0xFF,并且AD Data的前4个字节是0x4C、0x00、0x02和0x15。
  3. 当满足2.的条件时,将剩余的字节解析为接近UUID、大数、小数和幂。

如果您使用nv蓝牙,您可以从广告数据包中提取iBeacon,如下所示:

public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
{
    // Parse the payload of the advertising packet.
    List<ADStructure> structures =
        ADPayloadParser.getInstance().parse(scanRecord);

    // For each AD structure contained in the advertising packet.
    for (ADStructure structure : structures)
    {
        if (structure instanceof IBeacon)
        {
            // iBeacon was found.
            IBeacon iBeacon = (IBeacon)structure;

            // Proximity UUID, major number, minor number and power.
            UUID uuid = iBeacon.getUUID();
            int major = iBeacon.getMajor();
            int minor = iBeacon.getMinor();
            int power = iBeacon.getPower();

            ........

详见“iBeacon作为一种广告结构”。

邢修明
2023-03-14

编辑/更新:
它会变得更好。。阿尔特比肯
检查备降信标规格

AltBeacon为信标传输的内容以及这些数据如何被Android、视窗和其他设备使用带来了更大的透明度。

RadiusNetworks提供的Android iBeacon库不再可用的原因:

供应商已经开始遵守苹果公司制定的指导方针,因此,他们被迫“清除”其产品中Android设备与iBeacon协议检测之间的任何引用或连接。

阅读更多:苹果公司打击Android系统的iBeacon
我认为最好的选择似乎是来自一直在使用它的人,已经有了它,可以和你分享它,因为从以前的提交中,你可能不会得到每一个组件库、样本,服务

另外:Android iBeacon Lib RadiusNetworks首席执行官的说明

现在,说到接近UUID和主要UUID和次要UUID:
我还没有找到一种直接的方法来获取它,就参数而言,尽管您可以使用iBeacon技术查看android和SensorTag中信标的读取主要UUID、次要UUID。在后一种情况下,iBeacon服务后会显示主要、次要、uuid,但TI仪器可能是限制因素。

在android中,作为标识符。。您可以通过设备恢复设备地址。每个蓝牙设备的信标/的getAddress()

 类似资料:
  • 每当设备断开连接时,我确保对BluetoothGatt对象调用close()并将其设置为null。有什么见解吗? 编辑: 日志转储:对于这些日志,我将我的电话根目录化,并提高了/etc/bluetooth/bt_stack.conf中相关项的跟踪级别 成功连接-重新启动手机并安装应用程序后的第一次尝试。我能够连接,发现所有的服务/特性,并读/写。

  • jd.readBLECharacteristicValue(Object object) 读取低功耗蓝牙设备的特征值的二进制数据值。注意:必须设备的特征值支持 read 才可以成功调用。 参数名 类型 默认值 必填 说明 deviceId string 是 蓝牙设备 id serviceId string 是 蓝牙特征值对应服务的 uuid characteristicId string 是 蓝牙

  • 我得到一些信息,Android设备现在可以在蓝牙低能耗(BLE)外围模式下运行。应用程序可以使用此功能从Android L中的New向附近的设备广播它们的存在。 我已经全部配置好了(即蓝牙LE广告和广告数据的设置要在广告包中进行广告),当我开始发送时,我发现我无法监听传入的连接。谁能帮我? 我是一个基于l-开发者-预览-参考的API(Added Package:android.bluetooth.

  • 我目前正在开发一个应用程序,将使用蓝牙低能耗。 我正在使用以下链接, http://developer.android.com/samples/BluetoothLeGatt/src/com.example.android.bluetoothlegatt/DeviceScanActivity.html 我无法扫描周围的BLE设备。 要扫描设备,

  • 我目前正在编写一个应用程序,使用在2个或更多的手机之间传递小字符串的数据。 当前在前台,我正在传递:和。当应用程序位于前台时,我能够恢复(通过NSLog)通过CBAdvertisementDataLocalNameKey传递的字符串。 但是,当应用程序位于后台时,不会被传递。仍然与整数、和一起传递。 在梳理了一个似乎永无止境的叫做苹果文档的圈子后,我发现没有办法在应用程序处于后台时传递一个小字符串

  • 问题内容: 我正在编写一个Android BLE应用程序,并且试图获得某个特性的权限。我已经设法通过character.getProperties()获取特征属性,并且它返回非零值,但是,即使我确定特征具有PERMISSION_WRITE_ENCRYPTED_MITM(0x00000040,当我使用getPermission()方法时,它也会返回0。 )。 这是一个代码片段 难道我做错了什么?是否