Отображение ToastAndroid при закрытии приложения с помощью react-native и Headless JS

#android #react-native

#Android #react-native

Вопрос:

Я пытался интегрировать BroadcastReceiver с моим приложением react-native. Я хочу показывать ToastAndroid всякий раз, когда кто-то мне звонит. Он отлично работает, когда приложение запущено (либо на переднем плане, либо в фоновом режиме), но когда я убиваю приложение, оно больше не запускает ToastAndroid.

Я видел видео (YT link), где кто-то делает это в машинном коде, и оно работает, даже когда приложение убито.

Как я могу выполнить это с помощью react-native?

Мой сервисный код:

 public class CallService extends HeadlessJsTaskService {
@Override
protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
        return new HeadlessJsTaskConfig(
            "Call",
            Arguments.fromBundle(extras),
            5000,
            true
            );
    }
return null;
}
}
  

Мой код получателя:

 public final class CallReceiver extends BroadcastReceiver {

@Override
public final void onReceive(Context context, Intent intent) {
    Intent callIntent = new Intent(context, CallService.class);

    if (intent.getAction().equals("android.intent.action.PHONE_STATE")) {
        String phoneState = intent.getStringExtra("state");
        if (phoneState.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            String phoneNumber = intent.getStringExtra("incoming_number");
            callIntent.putExtra("number", phoneNumber);
        } 
    }

    context.startService(callIntent);
    HeadlessJsTaskService.acquireWakeLockNow(context);
}
}
  

И JS-код:

 const Call = async (data) => {
  console.log('It works!', data);
  ToastAndroid.show('TEST '   data.number, ToastAndroid.SHORT);
};
AppRegistry.registerHeadlessTask('Call', () => Call);
  

Комментарии:

1. Ознакомьтесь с этой библиотекой github.com/Rapsssito/react-native-background-actions

2. В описании библиотеки говорится: «Запланируйте фоновое задание, которое будет запускать ваш JavaScript, когда ваше приложение находится в фоновом режиме или на переднем плане».. Я ищу что-то, что могло бы работать в фоновом режиме, даже если приложение закрыто (не работает вообще — вы можете увидеть это поведение в конце видео, на которое я ссылался).

3. Что вы подразумеваете под «убийством» приложения? Принудительно закрыть его в настройках? Пожалуйста, обратите внимание, что если приложение будет принудительно удалено, оно не будет получать никаких трансляций, если не будет запущено снова вручную.

4. @Balhut, пожалуйста, обратитесь к ссылке github.com/facebook/react-native/issues/25894 . Надеюсь, это поможет!

5. @К.Радж. Спасибо, это было именно то, что я искал!