У меня есть приложение, созданное в ReactNative. Со стороны ReactNative я создал службу переднего плана, используя пакет «rn-foreground-service». При каком-то действии я запускаю службу переднего плана. Я вижу уведомление о запуске службы.
Что я хочу сделать: когда пользователь перезагружает устройство, служба должна запускаться автоматически. Без открытия приложения пользователем.
Ниже показано, что я уже пробовал. Когда я перезагружаю устройство, служба не запускается автоматически. Через несколько минут ОС Android выдает диалоговое окно с сообщением: «Приложение не удалось загрузить» и двумя кнопками «Информация о приложении» и «Принудительное закрытие».
Пожалуйста, дайте мне знать, в чем дело. в коде ниже.
регистрация в index.js
ReactNativeForegroundService.register();
App.js
import ReactNativeForegroundService from '@supersami/rn-foreground-service';
useEffect(() => {
let subscription;
if (Platform.OS === 'android') {
const { BootBroadcastReceiver } = NativeModules;
const bootEventEmitter = new NativeEventEmitter(BootBroadcastReceiver);
subscription = bootEventEmitter.addListener('startService', () => {
startForegroundService();
});
}
return () => {
subscription && subscription.remove();
};
}, []);
const startService = () => {
ReactNativeForegroundService.start({
id: 2,
title: 'My Foreground Service',
icon: 'ic_notification',
color: '#000000',
message: 'Service is running in the foreground',
});
}
на родной стороне Android,
BootModule.java файл
package com.myapp;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactMethod;
import java.util.Map;
import java.util.HashMap;
import android.util.Log;
public class BootModule extends ReactContextBaseJavaModule {
private static final String MODULE_NAME = "BootModule";
private static ReactApplicationContext reactContext;
BootModule(ReactApplicationContext context) {
super(context);
reactContext = context;
}
@Override
public String getName() {
return "BootBroadcastReceiver";
}
// @ReactMethod
private void sendEvent(String eventName, @Nullable WritableMap params) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
}
BootPackage.java файл
package com.myapp;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BootPackage implements ReactPackage {
@Override
public List createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List createNativeModules(
ReactApplicationContext reactContext) {
List modules = new ArrayList();
modules.add(new BootModule(reactContext));
return modules;
}
}
BootBroadcastReceiver.java файл
package com.myapp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.facebook.react.HeadlessJsTaskService;
public class BootBroadcastReceiver extends BroadcastReceiver {
private static final String MODULE_NAME = "BootBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent serviceIntent = new Intent(context, MyHeadlessTaskService.class);
context.startService(serviceIntent);
HeadlessJsTaskService.acquireWakeLockNow(context);
}
}
}
Пакет также добавляется в метод MainApplication — getApplication
packages.add(new BootPackage());
MyHeadlessTaskService.java файл
package com.myapp;
import android.content.Intent;
import androidx.annotation.Nullable;
import com.facebook.react.jstasks.HeadlessJsTaskConfig;
import com.facebook.react.HeadlessJsTaskService;
import org.json.JSONObject;
public class MyHeadlessTaskService extends HeadlessJsTaskService {
@Override
protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) {
return new HeadlessJsTaskConfig(
"StartForegroundService",
null,
1000,
true
);
}
}
Также добавлены службы в AndroidManifest.xml
Подробнее здесь: https://stackoverflow.com/questions/785 ... e-restarts
Автоматический запуск службы переднего плана после перезагрузки телефона ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Исключение Android 14 при запуске службы переднего плана с типами переднего плана
Anonymous » » в форуме Android - 0 Ответы
- 60 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Запуск службы переднего плана из быстрой плитки на Android (targetSdkVersion 34 и выше)
Anonymous » » в форуме Android - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Запуск службы переднего плана из быстрой плитки на Android (targetSdkVersion 34 и выше)
Anonymous » » в форуме Android - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-