Я использую службу переднего плана для обнаружения маяков, поскольку Android Oreo убивает все фоновые службы, поэтому мы решили использовать службу переднего плана для обнаружения маяков, когда приложение находится на переднем плане / убито / в фоновом режиме.
Это работаетнормально на андроиде 7.0 и ниже, но на андроиде 8 выдает ошибку "Задача не зарегистрирована для ключа" didEnterRegion "
Это мой код Helper.java
public static void sendNewBeacons(Context context, Collection<Beacon> beacons) {
if (beacons != null && beacons.size() > 0) {
for (Beacon beacon : beacons) {
Intent service = new Intent(context, MyTaskService.class);
service.putExtra("eventName", "didEnterRegion");
service.putExtra("beacon", (Parcelable) beacon);
context.startService(service);
HeadlessJsTaskService.acquireWakeLockNow(context);
}
}
}
public static void sendRemovedBeacons(Context context, Collection<Beacon> beacons) {
if (beacons != null && beacons.size() > 0) {
for (Beacon beacon : beacons) {
Intent service = new Intent(context, MyTaskService.class);
service.putExtra("eventName", "didExitRegion");
service.putExtra("beacon", (Parcelable) beacon);
context.startService(service);
HeadlessJsTaskService.acquireWakeLockNow(context);
}
}
}
Это код TaskService
public class MyTaskService extends HeadlessJsTaskService {
private final String TAG = "TaskService";
@Override
protected @Nullable
HeadlessJsTaskConfig getTaskConfig(Intent intent) {
Bundle extras = intent.getExtras();
if (extras == null) {
return null;
}
String event = extras.getString("eventName");
if (TextUtils.isEmpty(event)) {
return null;
}
WritableMap map = new WritableNativeMap();
if (extras.containsKey("beacon")) {
map = BeaconHelper.getObject((Beacon)
extras.getParcelable("beacon"));
}
Log.d(TAG, event);
return new HeadlessJsTaskConfig(event, map,5000, true);
}
@Override
public void onHeadlessJsTaskFinish(int taskId) {
super.onHeadlessJsTaskFinish(taskId);
}
Это мой App.js
AppRegistry.registerHeadlessTask('didEnterRegion', () =>
require('./BeaconEntering.js'));
AppRegistry.registerHeadlessTask('didExitRegion', () =>
require('./BeaconExiting.js'));
const myModuleEvt = new
NativeEventEmitter(NativeModules.BeaconManager);
const rangeBeacon = myModuleEvt.addListener('didRangeBeacons',
Util.didRangeBeacons);
const exitRegion = myModuleEvt.addListener('didExitRegion',
Util.didExitRegion);
const entryRegion =
myModuleEvt.addListener('didEnterRegion',Util.didEnterRegion);
Это журнал перед сбоем
09-12 20: 03: 25.801 15850-22489 / com.kr_beaconmanagerD / BluetoothAdapter: isLeEnabled (): ON
09-12 20: 03: 25.802 15850-15850 / com.kr_beaconmanager I / ScanJob: мы находимся внутри области маяка. Мы не будем сканировать между циклами.
09-12 20: 03: 25.809 15850-15850 / com.kr_beaconmanager I / System.out: null checkBeacons [id1: 341e458b-ad9e-4981-b01f-ddbce8f43d5c id2: 18 id3: 18] handleNewAndRemovedBe0
09-12 20: 03: 25,824 15850-15850 / ком.kr_beaconmanager I / System.out: showNotification didRangeBeaconsInRegion
09-12 20: 03: 25.828 15850-15850 / com.kr_beaconmanager I / System.out: didEnterRegion
09-12 20:03:25.830 15850-15913 / com.kr_beaconmanager E / ReactNativeJS: Задача не зарегистрирована для ключа didEnterRegion
09-12 20: 03: 26.031 15850-15850 / com.kr_beaconmanager I / CycledLeScanner: Использование сканера Android O
09-12 20: 03: 26.033 15850-15850 / com.kr_beaconmanager I / ScanJob: использование немедленного сканирования из манифеста: 208352939 Запуск задания немедленного сканирования: экземпляр org.altbeacon.beacon.service.ScanJob@f13f916
09-12 20: 03: 26.034 15850-15850 / com.kr_beaconmanager I / ScanJob: ScanJob версии 2.15.1 запускается в основном процессе
09-12 20: 03: 26.035 15850-15855/com.kr_beaconmanager I / zygote: Компилятор выделил 4 МБ для компиляции void android.widget.TextView. (android.content.Context, android.util.AttributeSet, int, int)
09-12 20:03:26.037 15850-15850 / com.kr_beaconmanager W / ModelSpecificDistanceCalculator: не удается найти соответствие для этого устройства.Использование по умолчанию Не удается найти соответствие для этого устройства.Использование по умолчанию
![enter image description here](https://i.stack.imgur.com/VqGse.jpg)