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

Android4.4设备可以充当iBeacon吗?[已关闭]

唐俊英
2023-03-14

想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。

在回答另一个问题时,我看到“你也可以在根Android4.4.3设备上作为信标进行传输,但它需要安装一个具有系统权限的应用程序。”

如何做到这一点?

共有1个答案

董高畅
2023-03-14

是的,这在4.4.3上是可能的,但是关键的API方法start广告()Stop广告()getAdvScanData()(允许您读取和写入广告中发送的原始信息)被阻止使用,除非应用程序具有android.permission.BLUETOOTH_PRIVILEGED。这是系统级权限,因此获得此权限的唯一方法是为您的自定义应用程序设置root,并将您的应用程序安装在 /system/priv-app目录中。

如果您能够做到这一点,那么实现这一点的基本代码是:

byte[] advertisingBytes;
advertisingBytes = new byte[] { 
  (byte) 0x18, (byte) 0x01,   // Radius Networks manufacturer ID
  (byte) 0xbe, (byte) 0xac,   // AltBeacon advertisement identifier
  // 16-byte Proximity UUID follows  
  (byte) 0x2F, (byte) 0x23, (byte) 0x44, (byte) 0x54, (byte) 0xCF, (byte) 0x6D, (byte) 0x4a, (byte) 0x0F,
  (byte) 0xAD, (byte) 0xF2, (byte) 0xF4, (byte) 0x91, (byte) 0x1B, (byte) 0xA9, (byte) 0xFF, (byte) 0xA6,
  (byte) 0x00, (byte) 0x01,   // major: 1
  (byte) 0x00, (byte) 0x02 }; // minor: 2
BluetoothManagerbluetoothManager = (BluetoothManager) this.getApplicationContext().getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
BluetoothAdvScanData scanData = bluetoothAdapter.getAdvScanData();
scanData.removeManufacturerCodeAndData(0x01);
scanData.setManufacturerData((int) 0x01, advertisingBytes);
scanData.setServiceData(new byte[]{});  // clear out service data.  
bluetoothAdapter.startAdvertising(advertiseCallback);   

以上代码向您展示了如何传输开源AltBeacon。但是,您可以通过更改字节模式来传输其他信标类型。

Android 4.4中的另一个重要限制是,一个bug阻止你发布超过24字节的数据,而不是应该允许的26字节。这意味着,如果信标广告需要超过24字节,则可能会被截断。例如,AltBeacon使用最后两个字节中的第二个字节来存储校准的发射器功率。由于无法发送,这意味着无法使用Android Beacon库的标准API进行距离估计。

你可以在这里看到这是如何完成的描述

 类似资料:
  • Android设备能否充当iBeacon,并确定其他Android设备何时进入其范围?其他Android设备是否需要开启蓝牙? 如果一个顾客来到我的商店,他的设备上没有安装我的应用程序,iBeacon可以工作吗,还是他必须先安装应用程序?每天都有这么多顾客来我们的商店,但是如果他们没有安装我的应用程序,iBeacon的概念有用吗?

  • iOS7设备能否充当iBeacon并确定其他iOS7设备何时在其范围内?其他iOS7设备是否需要打开蓝牙?

  • 我想从Android手机传输iBeacon封包,带有数据标志。 数据标志(0x01)是表示信标能力的蓝牙间隙规范 我的情况:目前,我正在尝试使用BluetoothLeAdvertiser做广告。但它并不像我想的那样有效。我发现,我只能宣传“制造商特定数据”。 我当前的结果: 我想要的: 通用iBeacon封包(下图)有数据标志,类型为0x01。我想将此标志添加到我的iBeacon广告数据包中。 这

  • 我正试图写一个游戏计划,我需要这个问题的信息: Android设备可以像iOS设备一样用作iBeacon发射器吗?

  • 问题内容: 我目前正在为我们团队的项目设计数据库结构。我目前在脑海中有一个非常疑问的问题:能否将外键用作另一个表上的主键? 以下是我们系统的数据库设计表: 我想做的是,该表应包含学生用户和指导顾问用户的ID(应该是系统的登录凭据)和密码。简而言之,和表的主键也是表的外键。但我不确定是否允许。 另一个问题是:一个表中也存在,这需要一个(其为中表)和一个(这也是在)它的每个记录的。如果学生和辅导员的I

  • 我知道iBeacon的定义是它正在传输的广告包的固定规范: 9字节iBeacon前缀 16字节UUID 2字节主要 2字节次要 1字节TX电源 也就是说,有没有什么可以阻止信标发送广告iBeacon数据包来唤醒手机的应用程序,并作为BLE数据包的一部分传输实际数据内容?为了发送/传输额外的数据,是否需要大量的握手? 信标还有其他传输数据的方式吗?我最大的担忧之一是欺骗我的信标,以伪造我试图收集的数