信标没有显示Altbeacon

时间:2018-01-11 20:55:25

标签: android-studio bluetooth-lowenergy beacon altbeacon eddystone

我正在尝试使用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();
    }
}

有谁知道我做错了什么? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

要检查的一些事项:

  1. 您需要将要检测的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);
    }
    
  2. 确保您已动态请求了相应的权限,如果您使用的是Android 6+,则需要这些权限。执行此操作的说明如下:https://altbeacon.github.io/android-beacon-library/requesting_permission.html

  3. onBeaconServiceConnect()的开头添加一条日志行,以确保调用它。