Я работаю над приложением с библиотекой Android Beacon с Android 8+, и мне нужно выполнить ранжирование в фоновом режиме.Для этого я использую нативно поддерживаемую возможность запустить сервис в качестве приоритетного сервиса.Приложение должно сохранять дальность, даже когда приложение закрыто!Таким образом, реализация интерфейса BeaconConsumer в действии не является хорошей идеей, так как, если удаление чувствительности из диапазона памяти, очевидно, прекратится.Чтобы обойти это, я создал собственный класс приложения и реализовал BeaconConsumer и начал разбираться в этом компоненте.Таким образом, пользовательское приложение является Потребителем и обрабатывает результаты в методе onServiceConnect (...).Нужно ли BootstrapNotifier для моей цели, или он будет работать так?Будет ли приложение продолжать ранжироваться, если приложение закрыто?
public class App extends Application implements BeaconConsumer {
onCreate(){
mbeaconManager =
org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
mbeaconManager.setDebug(true);
// Create Notification for the Foreground Service
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT
);
Notification notification = new
NotificationCompat.Builder(getApplicationContext(),CHANNEL_1_ID)
.setSmallIcon(R.drawable.icon)
.setContentTitle("\"Ranging runs in background!")
.setContentIntent(pendingIntent)
.build();
// Set Scanning Settings
mbeaconManager.enableForegroundServiceScanning(notification,
notificationID);
mbeaconManager.setEnableScheduledScanJobs(false);
mbeaconManager.setBackgroundBetweenScanPeriod(100);
mbeaconManager.setBackgroundScanPeriod(100);
}
public void onBeaconServiceConnect() {
mbeaconManager.removeAllRangeNotifiers();
mbeaconManager.addRangeNotifier(new RangeNotifier() {
public void didRangeBeaconsInRegion(...) {
// handle found beacons
}
mbeaconManager.startRangingBeaconsInRegion(...);
}
}
}