Android 4.4设备可以充当iBeacon吗?
作者:互联网
在answer to another question中,我看到“您还可以在根目录下的Android 4.4.3设备上作为信标进行传输,但是它需要安装具有系统特权的应用程序.”
如何才能做到这一点?
解决方法:
是的,这在4.4.3上是可能的,但是除非应用程序能够使用,否则关键的API方法startAdvertising(),stopAdvertising()和getAdvScanData()(允许您读取和写入广告中发送的原始信息)将被禁止使用.具有android.permission.BLUETOOTH_PRIVILEGED.这是系统级别的权限,因此获取此权限的唯一方法是针对您的自定义应用程序,即将手机挂起,然后将其安装在/ 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
标签:android-bluetooth,bluetooth-lowenergy,ibeacon,android-ibeacon,android 来源: https://codeday.me/bug/20191027/1945352.html