Android 无头服务在关闭弹出的expo应用程序后停止工作

Android 无头服务在关闭弹出的expo应用程序后停止工作,android,react-native,expo,Android,React Native,Expo,我正在尝试使用expokit(expo弹出)应用程序中react native的HeadlessJS 我想在应用程序关闭时运行JS函数。但这项服务正在关闭应用程序 编辑: 要知道,Headless在expokit RN应用程序中根本不起作用,android无法访问JS功能 HeadlessTaskService.java OfflineSync.java 调用toggleService(真/假)启动停止服务 OfflineSyncPackage.java 上游 AndroidManifest.x

我正在尝试使用expokit(expo弹出)应用程序中react native的HeadlessJS

我想在应用程序关闭时运行JS函数。但这项服务正在关闭应用程序

编辑: 要知道,Headless在expokit RN应用程序中根本不起作用,android无法访问JS功能

HeadlessTaskService.java OfflineSync.java 调用toggleService(真/假)启动停止服务

OfflineSyncPackage.java 上游 AndroidManifest.xml
在正常的react原生应用程序中,行为看起来很好,但在expo应用程序中,HJS服务会随着应用程序关闭。

检查清单中的完整程序包名称,并使用小写字母作为程序包名称:感谢replay@Oleg,你是指文件夹名称吗?从
.OfflineSync.HeadlessTaskService
.OfflineSync.HeadlessTaskService
import ...
public class HeadlessTaskService extends HeadlessJsTaskService {
    @Nullable
    protected HeadlessJsTaskConfig getTaskConfig(Intent intent) {
        Bundle extras = intent.getExtras();
        if (extras != null) {
        return new HeadlessJsTaskConfig(
            "OfflineSync",
            Arguments.fromBundle(extras),
            6000,
            false
        );
      }
    }
}


public class OfflineSync extends ReactContextBaseJavaModule {

    public static final String REACT_CLASS = "OfflineSync";
    private static ReactApplicationContext reactContext;

    public OfflineSync(@Nonnull ReactApplicationContext reactContext) {
        super(reactContext);
        this.reactContext = reactContext;
    }

    @Nonnull
    @Override
    public String getName() {
        return REACT_CLASS;
    }

    @ReactMethod
    public void toggleService(Boolean start){
        if(start.equals(true)){
            startService();
        }else{
            stopService();
        }
    }

    @ReactMethod
    public void startService() {
        this.reactContext.startService(new Intent(this.reactContext, AndroidService.class));
    }

    @ReactMethod
    public void stopService() {
        this.reactContext.stopService(new Intent(this.reactContext, AndroidService.class));
    }
}
public class OfflineSyncPackage implements ReactPackage, Package {
    @Nonnull
    @Override
    public List<NativeModule> createNativeModules(@Nonnull ReactApplicationContext reactContext) {
        return Arrays.<NativeModule>asList(
                new OfflineSync(reactContext)
        );
    }

    @Nonnull
    @Override
    public List<ViewManager> createViewManagers(@Nonnull ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}
public class AndroidService extends Service {
private Handler handler = new Handler();
    private Runnable runnableCode = new Runnable() {
        @Override
        public void run() {
            Context context = getApplicationContext();
            Intent myIntent = new Intent(context, HeadlessTaskService.class);
            context.startService(myIntent);
            HeadlessJsTaskService.acquireWakeLockNow(context);
            handler.postDelayed(this, 2000);
        }
    };
}
public class BootUpReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        context.startService(new Intent(context, AndroidService.class));
    }
}

<service android:name=".AndroidService" android:enabled="true" android:exported="false" />
      <service android:name=".HeadlessTaskService" />
      <receiver android:name=".BootUpReceiver"
          android:enabled="true"
          android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
          <intent-filter>
              <action android:name="android.intent.action.BOOT_COMPLETED" />
              <category android:name="android.intent.category.DEFAULT" />
          </intent-filter>
      </receiver>
@Override
  public List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
        new OfflineSyncPackage()
    );
  }
HeadlessFn = () =>{
 ...
}
export default function App() {
NativeModules.OfflineSync.toggleService(true); //To Start service
...
}

AppRegistry.registerHeadlessTask('OfflineSync', () => HeadlessFn) // Registering HLJ
AppRegistry.registerComponent("main", () => App);