我是一名法国学生,我正在学习Android语言。我的朋友和我必须创建一个基于iBeacon技术的Android应用程序。我几天前发现了AltBeacon库,我发现它很棒,但我有一些问题要问。
首先,你必须明白我是编程的新手,我的问题将是你的白痴。但是我真的需要帮助;)
Android提供了Bluetooth.LE Api,我明白我可以使用startLeScan()方法来获取BluetoothDevice。 但是,如果我想使用AltBeacon库,这是允许我们扫描iBeacon设备并获取Beacon对象的等效方法吗?
另一个问题,如果我使用startLeScan()获取BluetoothDevice,我如何将其转换为Beacon才能使用AltBeacon方法?
对不起我的英语错误,我希望我的问题可以理解。再见
答案 0 :(得分:2)
这是我们用来检测iBeacons并使用AltBeacon lib在Android服务中获取信标对象的方法。
设置BeaconManager
ClassToTest
开始测量信标
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.setForegroundScanPeriod(5100);
beaconManager.setForegroundBetweenScanPeriod(2000);
beaconManager.setBackgroundScanPeriod(5100);
beaconManager.setBackgroundBetweenScanPeriod(2000);
//Parse IBeacon structure
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
答案 1 :(得分:1)
您可以轻松使用Android Beacon Library扫描信标并使用"测距API"如下所述:
http://altbeacon.github.io/android-beacon-library/samples.html
如果要直接调用startLeScan()
并使用库代码将结果转换为信标对象,可以在扫描回调中调用以下方法:
Beacon beacon = beaconParser.fromScanData(scanData, rssi, bluetoothDevice)
但是,如果使用专有信标格式(如来自Apple),则需要构建具有适当布局的BeaconParser
。这是专有信息,但您可以进行Google搜索以找出构建的正确方法
专有布局BeaconParser
。
答案 2 :(得分:1)
我认为nv-bluetooth是从广告包中提取iBeacon的最简单方法。以下是onLeScan方法的示例实现。
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
{
// Parse the payload of the advertising packet.
List<ADStructure> structures =
ADPayloadParser.getInstance().parse(scanRecord);
// For each AD structure contained in the advertising packet.
for (ADStructure structure : structures)
{
if (structure instanceof IBeacon)
{
// iBeacon was found.
IBeacon iBeacon = (IBeacon)structure;
// Proximity UUID, major number, minor number and power.
UUID uuid = iBeacon.getUUID();
int major = iBeacon.getMajor();
int minor = iBeacon.getMinor();
int power = iBeacon.getPower();
........
有关详细信息,请参阅“iBeacon as a kind of AD structures”。