我正在尝试使用Altbeacon提供的演示代码来使用代码。通常它应该记录一些东西,但事实并非如此。它在logcat中显示的是这个
01-11 20:50:33.964 12498-12508/com.example.thomas.test1 D/BluetoothLeScanner: onScanResult() - ScanResult{mDevice=EF:47:2A:56:1B:55, mScanRecord=ScanRecord [mAdvertiseFlags=6, mServiceUuids=[0000feaa-0000-1000-8000-00805f9b34fb], mManufacturerSpecificData={29540=[5, -86, -69, -52, -35, -18, -1, 0, 17, 34, 51, 68]}, mServiceData={0000feaa-0000-1000-8000-00805f9b34fb=[16, -30, 0, 103, 111, 111, 103, 108, 101, 0]}, mTxPowerLevel=-30, mDeviceName=Beacon1], mRssi=-26, mTimestampNanos=981220542678629}
因此它确实检测到了信标,但没有将其显示为日志。
我使用的代码:
公共类MainActivity扩展AppCompatActivity实现BeaconConsumer {
protected static final String TAG = "RangingActivity";
private BeaconManager beaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.bind(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
beaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Log.i(TAG, "The first beacon I see is about "+beacons.iterator().next().getDistance()+" meters away.");
}
}
});
try {
beaconManager.startRangingBeaconsInRegion(new Region("0000feaa-0000-1000-8000-00805f9b34fb", null, null, null));
} catch (RemoteException e) {
e.printStackTrace();
}
}
有谁知道我做错了什么? 提前谢谢!
答案 0 :(得分:0)
要检查的一些事项:
您需要将要检测的Eddystone帧的信标解析器添加到onCreate方法中。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT));
beaconManager.bind(this);
}
确保您已动态请求了相应的权限,如果您使用的是Android 6+,则需要这些权限。执行此操作的说明如下:https://altbeacon.github.io/android-beacon-library/requesting_permission.html
在onBeaconServiceConnect()
的开头添加一条日志行,以确保调用它。