Я использую стандартный пример, предоставленный здесь, за исключением того, что я изменил его чтобы зарегистрировать это, если ничего не найдено, чтобы убедиться, что оно действительно вызвано.
@Override
public void onBeaconServiceConnect() {
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() == 0) {
Log.i("ActivityMain", "no beacons found");
}
if (beacons.size() > 0) {
Log.i("ActivityMain", "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away.");
}
}
});
try {
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
} catch (RemoteException e) {
e.printStackTrace();
}
}
Я попытался добавить несколько дополнительных парсеров перед привязкой и попытался сканировать без их добавления:
beaconManager.getBeaconParsers().add(new BeaconParser(BeaconParser.ALTBEACON_LAYOUT));
beaconManager.getBeaconParsers().add(new BeaconParser(BeaconParser.EDDYSTONE_TLM_LAYOUT));
beaconManager.getBeaconParsers().add(new BeaconParser(BeaconParser.EDDYSTONE_UID_LAYOUT));
beaconManager.getBeaconParsers().add(new BeaconParser(BeaconParser.EDDYSTONE_URL_LAYOUT));
beaconManager.getBeaconParsers().add(new BeaconParser(BeaconParser.URI_BEACON_LAYOUT));
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
Я указал следующие разрешения в манифесте:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
И прямо сейчас в моей комнате есть несколько маяков, как Eddystone, так и iBeacon. Ни один из них не найден после вызова startRangingBeaconsInRegion(...)
D/BluetoothLeScanner: could not find callback wrapper
довольно часто появляется в logcat, если это какой-либо показатель. Дело в том, что callback вроде бы найден, потому что я точно знаю, что этот кусок кода
if (beacons.size() == 0) {
Log.i("ActivityMain", "no beacons found");
}
выполняется раз в секунду. Я пробовал это приложение Beacon Scanner. который также использует AltBeacon и отлично находит мои маяки. Я проверил его источник, и ему не нравится, что происходит что-то, чего я не делаю сам, хотя другое приложение использует kotlin, а я использую java.
Я пытался сделать это как на Moto G3, так и на Galaxy S7, и мне не повезло ни с одним из них.
Что может быть причиной этого?
D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
, однакоdidRangeBeaconsInRegion
по-прежнему каждый раз возвращает пустой список. - person user3340459   schedule 09.01.2018