#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. @К.Радж. Спасибо, это было именно то, что я искал!