Нет задачи, зарегистрированной для ключевой ошибки при использовании безголового JS - PullRequest
0 голосов
/ 12 сентября 2018

Я использую службу переднего плана для обнаружения маяков, поскольку 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

1 Ответ

0 голосов
/ 13 сентября 2018

Нашли исправление, нам нужно сначала определить функцию

const didEnterRegion = async (data) => {
  console.log(data);
};

, а затем зарегистрировать headlessTask

AppRegistry.registerHeadlessTask('didEnterRegion', () => didEnterRegion);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...