使用 altBeacon 参考让 XYFind iBeacon 与 Android 一起工作
Getting XYFind iBeacon to work with Android using altBeacon Reference
我有一个来自 XYFindit 的 iBeacon。需要让 Samsung Galaxy S4 Mini 运行ning KitKat 检测到它。
我 运行 来自 Radius 网络的定位应用程序,它似乎可以很好地找到信标。
截图如下:
但是当我 运行 AltBeacon Reference 程序时,屏幕上什么也看不到。我点击 "Start Ranging" 按钮,出现空白屏幕,什么也没有出现。
查看日志,我看到了这个:
D/BluetoothAdapter﹕ startLeScan(): null
D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=5
D/BluetoothAdapter﹕ onScanResult() - Device=00:EA:20:00:12:80 RSSI=-87
D/BluetoothAdapter﹕ stopLeScan()
D/BluetoothAdapter﹕ startLeScan(): null
D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=5
D/BluetoothAdapter﹕ stopLeScan()
D/BluetoothAdapter﹕ startLeScan(): null
D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=5
D/BluetoothAdapter﹕ onScanResult() - Device=00:EA:20:00:12:80 RSSI=-90
D/BluetoothAdapter﹕ stopLeScan()
那么,它似乎是在寻找设备的 MAC 地址,但除此之外什么都没有?我查看了@davidgyoung 给出的一些答案,但那里尝试过的东西似乎对我不起作用。
Radius Network 的 Locate App 有什么功能而 Reference App 没有?
了解默认情况下,Android Beacon 库及其参考应用程序默认仅检测 AltBeacon。如果你想像屏幕截图中显示的那样检测专有信标,你必须添加一个特殊的信标解析器表达式。这是一个简单的一行代码添加。
不幸的是,这是必要的,因为信标布局是专有的,不能在开源项目中发布。
要找到要添加的正确代码行,请尝试 Google 搜索 "getBeaconParsers"
万一其他人来这里试图解决这个问题,当然 @davidgyoung 关于解析器是正确的。但是,如果您正在寻找适用于 XYFindit 信标的布局,我在 SO 上找到了这个:
Is This The Correct Layout?
它对我有用。
修改后的class(如果要参考例子)其实就是
BeaconReferenceApplication
修改后是这样的:
public void onCreate()
{
super.onCreate();
BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
Log.d(TAG, "setting up background monitoring for beacons and power saving");
// wake up the app when a beacon is seen
Region region = new Region("backgroundRegion",
null, null, null);
regionBootstrap = new RegionBootstrap(this, region);
// simply constructing this class and holding a reference to it in your custom Application
// class will automatically cause the BeaconLibrary to save battery whenever the application
// is not visible. This reduces bluetooth power usage by about 60%
backgroundPowerSaver = new BackgroundPowerSaver(this);
// If you wish to test beacon detection in the Android Emulator, you can use code like this:
// BeaconManager.setBeaconSimulator(new TimedBeaconSimulator() );
// ((TimedBeaconSimulator) BeaconManager.getBeaconSimulator()).createTimedSimulatedBeacons();
}
我有一个来自 XYFindit 的 iBeacon。需要让 Samsung Galaxy S4 Mini 运行ning KitKat 检测到它。
我 运行 来自 Radius 网络的定位应用程序,它似乎可以很好地找到信标。
截图如下:
查看日志,我看到了这个:
D/BluetoothAdapter﹕ startLeScan(): null
D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=5
D/BluetoothAdapter﹕ onScanResult() - Device=00:EA:20:00:12:80 RSSI=-87
D/BluetoothAdapter﹕ stopLeScan()
D/BluetoothAdapter﹕ startLeScan(): null
D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=5
D/BluetoothAdapter﹕ stopLeScan()
D/BluetoothAdapter﹕ startLeScan(): null
D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=5
D/BluetoothAdapter﹕ onScanResult() - Device=00:EA:20:00:12:80 RSSI=-90
D/BluetoothAdapter﹕ stopLeScan()
那么,它似乎是在寻找设备的 MAC 地址,但除此之外什么都没有?我查看了@davidgyoung 给出的一些答案,但那里尝试过的东西似乎对我不起作用。
Radius Network 的 Locate App 有什么功能而 Reference App 没有?
了解默认情况下,Android Beacon 库及其参考应用程序默认仅检测 AltBeacon。如果你想像屏幕截图中显示的那样检测专有信标,你必须添加一个特殊的信标解析器表达式。这是一个简单的一行代码添加。
不幸的是,这是必要的,因为信标布局是专有的,不能在开源项目中发布。
要找到要添加的正确代码行,请尝试 Google 搜索 "getBeaconParsers"
万一其他人来这里试图解决这个问题,当然 @davidgyoung 关于解析器是正确的。但是,如果您正在寻找适用于 XYFindit 信标的布局,我在 SO 上找到了这个:
Is This The Correct Layout?
它对我有用。
修改后的class(如果要参考例子)其实就是
BeaconReferenceApplication
修改后是这样的:
public void onCreate()
{
super.onCreate();
BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
Log.d(TAG, "setting up background monitoring for beacons and power saving");
// wake up the app when a beacon is seen
Region region = new Region("backgroundRegion",
null, null, null);
regionBootstrap = new RegionBootstrap(this, region);
// simply constructing this class and holding a reference to it in your custom Application
// class will automatically cause the BeaconLibrary to save battery whenever the application
// is not visible. This reduces bluetooth power usage by about 60%
backgroundPowerSaver = new BackgroundPowerSaver(this);
// If you wish to test beacon detection in the Android Emulator, you can use code like this:
// BeaconManager.setBeaconSimulator(new TimedBeaconSimulator() );
// ((TimedBeaconSimulator) BeaconManager.getBeaconSimulator()).createTimedSimulatedBeacons();
}