Проблема при реализации безголового JS для выполнения фоновых служб в React Native

#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»

Было бы здорово, если бы мне помогли.