Вернитесь с React Native на AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 Вернитесь с React Native на Android

Сообщение Гость »


Я пытаюсь вернуться с RN на Android. В этой документации показан пример использования события BackHandler. Если я использую тот же код и нажимаю кнопку «Назад» в эмуляторе Android, я ожидал, что сосредоточусь на приложении Android, которое вызывает приложение RN, а приложение RN потеряет фокус и перейдет в фоновый режим.

В журналах я вижу, что Вы нажали ДА!, если я добавляю console.log, но выход из приложения почему-то не выполняется BackHandler.exitApp().< /п> Думаю, перейти с RN на Android не так просто, как просто включить следующий код, потому что приложение Android, вызывающее приложение RN, не является частью реагирующей навигации, поэтому нет ссылки, и поэтому даже приложение RN не уходит.

Вот код:

import React, { useEffect } из «реагировать»; импортировать { Text, View, StyleSheet, BackHandler, Alert} из «реагировать-родной»; const App = () => { useEffect(() => { const backAction = () => { Alert.alert("Держись!", "Вы уверены, что хотите вернуться?", [ { текст: «Отменить», onPress: () => ноль, стиль: «отмена» }, { текст: "ДА", onPress: () => BackHandler.exitApp() } ]); вернуть истину; }; const backHandler = BackHandler.addEventListener( "Аппаратное обеспечениеBackPress", НазадДействие ); return () => backHandler.remove(); }, []); возвращаться ( Нажмите кнопку «Назад»! ); }; константные стили = StyleSheet.create({ контейнер: { гибкий: 1, alignItems: "центр", justifyContent: "центр" }, текст: { Размер шрифта: 18, FontWeight: «жирный» } }); экспортировать приложение по умолчанию; Однако мне интересно, не хватает ли мне какой-либо конфигурации в Android? Действие, вызывающее приложение RN, следующее:
пакет com.reactnative; импортировать android.content.Intent; импортировать android.net.Uri; импортировать android.os.Bundle; импортировать android.provider.Settings; импортировать android.util.Log; импортировать com.facebook.hermes.reactexecutor.HermesExecutorFactory; импортировать com.facebook.react.PackageList; импортировать com.facebook.react.ReactActivity; импортировать com.facebook.react.ReactInstanceManager; импортировать com.facebook.react.ReactPackage; импортировать com.facebook.react.ReactRootView; импортировать com.facebook.react.common.LifecycleState; импортировать com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; импортировать java.io.Serializable; импортировать java.util.ArrayList; импортировать java.util.List; импортировать com.reactnative.BuildConfig; публичный класс MyFirstReactActivity расширяет ReactActivity реализует DefaultHardwareBackBtnHandler { частный ReactInstanceManager mReactInstanceManager; частный ReactRootView mReactRootView; частный финал int OVERLAY_PERMISSION_REQ_CODE = 1; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); mReactRootView = новый ReactRootView (это); Пакеты List = новый PackageList(getApplication()).getPackages(); mReactInstanceManager = ReactInstanceManager.builder() .setJavaScriptExecutorFactory(новый HermesExecutorFactory()) .setApplication(getApplication()) .setCurrentActivity(это) .setBundleAssetName("index.android.bundle") .setJSMainModulePath("индекс") .addPackages(пакеты) .setUseDeveloperSupport(BuildConfig.DEBUG) .setInitialLifecycleState(LifecycleState.RESUMED) .строить(); mReactRootView.startReactApplication(mReactInstanceManager, «ReactNativeProject», InitialProperties); если (!Settings.canDrawOverlays(this)) { Намерение намерение = новое намерение (Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("пакет:" + getPackageName())); startActivityForResult (намерение, OVERLAY_PERMISSION_REQ_CODE); } setContentView (mReactRootView); } @Override общественный недействительный вызовDefaultOnBackPressed () { супер.onBackPressed(); } @Override защищенный недействительный onPause() { супер.онПауза(); если (mReactInstanceManager!= ноль) { mReactInstanceManager.onHostPause(это); } } @Override защищенный недействительный onResume() { супер.онрезюме(); если (mReactInstanceManager!= ноль) { mReactInstanceManager.onHostResume(это, это); } } @Override защищенная пустота onDestroy() { супер.onDestroy(); если (mReactInstanceManager!= ноль) { mReactInstanceManager.onHostDestroy(это); } если (mReactRootView! = ноль) { mReactRootView.unmountReactApplication(); } } @Override общественный недействительный onBackPressed () { если (mReactInstanceManager!= ноль) { mReactInstanceManager.onBackPressed(); } еще { супер.onBackPressed(); } } @Override public void onActivityResult (int requestCode, int resultCode, данные намерения) { super.onActivityResult(requestCode, resultCode, data); если (requestCode == OVERLAY_PERMISSION_REQ_CODE) { если (!Settings.canDrawOverlays(this)) { // Разрешение SYSTEM_ALERT_WINDOW не предоставлено Log.d("РАЗРЕШЕНИЕ", "Разрешение не предоставлено!!"); } } mReactInstanceManager.onActivityResult(this, requestCode, resultCode, data); } @Override защищенная строка getMainComponentName() { вернуть «ReactNativeProject»; } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»