Я пытаюсь внедрить фоновый сервис для моего реактивного приложения, используя безголовый JS, вызывая собственный собственный модуль Android.Но я столкнулся с проблемой с Intent, которую я использую для запуска службы Intent, когда приложение работает в фоновом режиме.
Пожалуйста, помогите мне исправить это.Я javascript разработчик, поэтому мне сложно понять поток данных в java и android.
Я создал файл MytaskService.java в com.native_app и добавил этот сервис в AndroidMenifest.xml.Также создан специальный модуль, в котором я пишу код для запуска моего сервиса с помощью Intent и здесь сталкиваюсь с проблемой. Мой сервис не запускается, когда приложение переходит в фоновый режим.
MyTaskService.java
package com.native_app;
import android.content.Intent;
import android.os.Bundle;
import com.facebook.react.HeadlessJsTaskService;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.jstasks.HeadlessJsTaskConfig;
import com.facebook.react.bridge.WritableMap;
public class MyTaskService extends HeadlessJsTaskService {
@Override
protected HeadlessJsTaskConfig getTaskConfig(Intent intent) {
Bundle extras = intent.getExtras();
WritableMap data = extras != null ? Arguments.fromBundle(extras)
: null;
return new HeadlessJsTaskConfig(
"mytask", //<- this is my javascript task
data,
5000,
true);
};
}
AndroidMenifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.native_app">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
//<- my service
<service android:name="com.native_app.MyTaskService" android:enabled="true" android:label="MyTaskService" />
</application>
</manifest>
BackgroundTaskModule.java
public class BackgroundTaskModule extends ReactContextBaseJavaModule{
public BackgroundTaskModule(ReactApplicationContext reactContext){
super(reactContext);
};
@Override
public String getName(){
return "BackgroundTask";
};
@ReactMethod
public void headless(Context context, Intent intent) {
if (!isAppOnForeground((context))) {
Intent serviceIntent = new Intent(context, MyTaskService.class);
serviceIntent.putExtra("hello", "ankit dubey");
context.startService(serviceIntent);
HeadlessJsTaskService.acquireWakeLockNow(context);
}
}
private boolean isAppOnForeground(Context context) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> appProcesses =
activityManager.getRunningAppProcesses();
if (appProcesses == null) {
return false;
}
final String packageName = context.getPackageName();
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.importance ==
ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
appProcess.processName.equals(packageName)) {
return true;
}
}
return false;
}
};
Я создал задачу javascript в своем реактивном приложении с именем «mytask» в App.js и зарегистрировал ее.
Пожалуйста, дайте мне знать, что я делаюнеправильно.