在answer to another question中,我看到了#34;您还可以在已植根的Android 4.4.3设备上作为信标进行传输,但它需要安装具有系统权限的应用。"
如何做到这一点?
答案 0 :(得分:4)
是的,这可以在4.4.3上进行,但是关键API方法startAdvertising()
,stopAdvertising()
和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中的另一个重要限制是,错误会阻止您发布超过24个字节的数据,而不是应该允许的26个数据。这意味着如果信标通告需要超过24个字节,则可能会被截断。例如,AltBeacon使用最后两个字节中的第二个来存储校准的发射机功率。由于无法发送,这意味着使用Android Beacon Library的标准API无法进行距离估算。
您可以看到有关如何完成此操作的说明here