在玩iBeacon模拟器时,我注意到了这一点:
*无论模拟iBeacons的设备(iOS和Android),Android手机都可以识别iBeacons
*仅当模拟设备也是iPhone时,iPhone才能识别iBeacon。
那是为什么?这是硬件吗?
答案 0 :(得分:2)
iBeacon没有硬件或操作系统依赖性。您可以从Android,iOS,MacOS,Linux,Windows 10和许多嵌入式平台传输iBeacon数据包。
这是一张显示Android Nexus 5X的传输和iPhone 6上的检测结果的照片:
这里没有特殊的技巧,但是肯定有可能搞砸了,所以不起作用。最常见的两个陷阱是:
必须将发射器设置为使用Apple Bluetooth LE制造商代码0x004c
发送器必须发送与iOS接收器相同的ProximityUUID(也称为ID1),该接收器已设置为使用已配置的CLBeaconRegion进行检测。
以上设置在iOS上使用Android上的BeaconScope应用(使用Android Beacon Library传输iBeacon)和iOS上的Locate应用(使用CoreLocation检测iBeacon)。
使用AndroidBeaconLibrary,设置此发送器非常简单:
Beacon beacon = new Beacon.Builder()
.setId2(1) // Major for beacon
.setId3(1) // Minor for beacon
.setManufacturer(0x004C) // Apple
.setTxPower(-56) // Power in dB
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");
transmitter = new BeaconTransmitter(context, beaconParser);
transmitter.startAdvertising(beacon, new AdvertiseCallback() {
@Override
public void onStartFailure(int errorCode) {
Log.i(Settings.DEBUG, "Advertisement start failed with code: " + errorCode);
}
});