Не удается сканировать в фоновом режиме

Это код, который должен сканировать в фоновом режиме в соответствии с примером кода на странице altbeacon, но этого не происходит, я даже не получил тег " Ввести регион". RangingActivity, в которой BeaconConsumer реализует маяки без проблем. Единственный журнал, который я вижу, - это фоновое сканирование! когда я запускаю приложение в первый раз. Заранее спасибо.

public class BackgroundScanner extends Application implements BootstrapNotifier {
private String TAG="Background Scanner";
private RegionBootstrap regionBootstrap;
private BackgroundPowerSaver backgroundPowerSaver;
private boolean haveDetectedBeaconsSinceBoot = false;
private RangingActivity rangingActivity;
@Override
public void onCreate() {
    Log.d(TAG,"Background Scanning Initiated!");
    super.onCreate();
    BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
    beaconManager.getBeaconParsers().add(new BeaconParser().
            setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19"));
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT));
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));

    Region region = new Region("backgroundRegion",
            null, null, null);
    beaconManager.setBackgroundBetweenScanPeriod(60000L);
    try {
        beaconManager.updateScanPeriods();
    } catch (RemoteException e) {
        e.printStackTrace();
    }
    regionBootstrap = new RegionBootstrap(this, region);
    backgroundPowerSaver = new BackgroundPowerSaver(this);

}

@Override
public void didEnterRegion(Region region) {
    Log.d(TAG, "did enter region.");
    sendNotification();
}
@SuppressLint("NewApi")
private void sendNotification() {
    NotificationCompat.Builder builder =
            new NotificationCompat.Builder(this)
                    .setContentTitle("Notification!")
                    .setContentText("Beacon Nearby!")
                    .setSmallIcon(R.mipmap.ic_launcher);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addNextIntent(new Intent(this, RangingActivity.class));
    PendingIntent resultPendingIntent =
            stackBuilder.getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT
            );
    builder.setContentIntent(resultPendingIntent);
    NotificationManager notificationManager =
            (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1, builder.build());
}

@Override
public void didExitRegion(Region region) {

}

@Override
public void didDetermineStateForRegion(int i, Region region) {

}

1 ответ

Решение

Библиотека может подумать, что она уже в регионе. Начиная с версии 2.8, библиотека отслеживает состояние региона при перезапуске приложения, чтобы предотвратить didEnterRegion Обратные вызовы. Вы можете проверить это, выключив все маяки поблизости (или отключив Bluetooth), пока не получите didExitRegion Перезвоните. Затем включите их снова и посмотрите, получите ли вы didEnterRegion Перезвоните.

Другие вопросы по тегам