#android #react-native #background-task
Вопрос:
Я не могу найти никакой надлежащей документации для реализации безголового JS в React-Native для Android.
На данный момент я реализовал их, следуя некоторым документам по смешиванию,
AndroidManifest.xml:
lt;service android:name="com.awesomeproject.LocationService" /gt;
MainApplication.java:
Я создал экземпляр LocationListener и переопределил его функцию onLocationChanged
private final LocationListener listener = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } @Override public void onLocationChanged(Location location) { Intent myIntent = new Intent(getApplicationContext(), LocationService.class); getApplicationContext().startService(myIntent); HeadlessJsTaskService.acquireWakeLockNow(getApplicationContext()); } };
затем зарегистрировал его в функции класса onCreate
, например:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Start requesting for location locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 1, listener);
LocationService.java:
Затем создал службу в android/app/src/main/java/com/locationlistener/LocationService.java
//imports package com.awesomeproject; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import com.facebook.react.HeadlessJsTaskService; import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.Arguments; import com.facebook.react.jstasks.HeadlessJsTaskConfig; import javax.annotation.Nullable; //creating the service class public class LocationService extends HeadlessJsTaskService { @Nullable protected HeadlessJsTaskConfig getTaskConfig(Intent intent) { Bundle extras = intent.getExtras(); if (extras != null) { Toast.makeText(this, "Helloooooooo", Toast.LENGTH_LONG); Log.d("Helloiff", "test condition"); return new HeadlessJsTaskConfig( "LocationService", Arguments.fromBundle(extras), 5000, // timeout for the task false // optional: defines whether or not the task is allowed in foreground. Default is false ); } return null; } }
And called it like this in my index.js root project folder:
const LogLocation = async (data) =gt; { console.warn("I am called from java service"); setInterval(() =gt; { console.warn("I am called from java service inside setInterval"); }, 1000); } AppRegistry.registerHeadlessTask('LocationService', () =gt; LogLocation); AppRegistry.registerComponent(appName, () =gt; App);
Это пока никак не повлияло на мое приложение. Кроме этого, я получаю это предупреждение:
registerHeadlessTask или registerCancellableHeadlessTask вызывается несколько раз для одного и того же ключа «LocationService»
Было бы здорово, если бы мне помогли.