2017-12-08 11 views
0

반응 네이티브 BackHandler android에서 문제가 발생하면 '집'화면을 다시 누르면 내 앱이 닫히게됩니다.BackHandler.exitApp 앱이 이전 페이지를 다시 표시 할 때 계속 최소화됩니다.

onBackPress() { 
     BackHandler.exitApp(); 
     return false; 

    } 

    constructor(props) { 
     super(); 
     this._onBackPress = this.onBackPress.bind(this); 
    } 

장면 설정 :

const Scenes = Actions.create(
    <Scene key="root"> 
    <Scene key="setup" component={SetupContainer} title="setup" hideNavBar></Scene> 
    <Scene key="home" component={HomeContainer} title="home" hideNavBar></Scene> 
    </Scene> 
); 

그러나, 응용 프로그램은 단순히 최소화하고, 을 사용자가 다시 응용 프로그램을 선택하는 경우, 그것은 단지 수에 의미 이전 페이지 (설정)을 표시합니다 한 번 액세스했습니다.

어쨌든 실제로이 앱을 파괴하여 다시 시작할 수 없도록하려는 것입니다.

+0

예, 'react-native-router-flux'라이브러리의 버그입니다. [여기] (https://github.com/aksonov/react-native-router-flux/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+back)에서 볼 수 있듯이 사람들은 앱을 종료 할 때의 뒤로 버튼 동작에 문제가 있습니다 (네이티브 안드로이드의 산들 바람 이었음). 나는 지난 2 일 동안 동일한 문제에 대한 해킹을 시도했지만 아무런 성공도하지 못했다. 뒤로 버튼을 눌렀을 때 "Activity.finish()"를 호출하는 네이티브 모듈을 만들었지 만 스플래시 화면으로 다시 시작하는 대신 앱이 같은 화면에서 다시 시작됩니다. –

답변

1

방금이 솔루션을 만났습니다. 앱을 종료하려면 이전 화면에서 다시 시작하는 대신 iOS 앱처럼 다시 시작할 수 있도록 앱을 기본적으로 "종료"하는 기본 모듈을 사용했습니다. 내 네이티브 코드에서

, 나는 부르고 -

 @ReactMethod 
    public void finishAndroidActivity(int x) { 
    Log.d("MainActivity","finishAndroidActivity"); 
    Activity activity = getCurrentActivity(); 
    //Toast.makeText(getReactApplicationContext(), "Exit", Toast.LENGTH_SHORT).show(); 

    if (activity != null) { 
     Log.d("Received Value =", String.valueOf(x)); 
     if(x==1) 
     { 
      android.os.Process.killProcess(android.os.Process.myPid()); 
     } 
     else 
      activity.onBackPressed(); 
    } 
    } 

프로세스를 종료 할 수 있습니다. 내 자바 스크립트 코드에서

, 나는 내가 (감속기 기능에) 다시 버튼을 누를 때마다 종료하려는 화면에 따라 정수 값을 전달 해요 -이 같이 잘 작동

const reducerCreate = params => { 
    const defaultReducer = new Reducer(params); 
    return (state, action) => { 
     if (action.type === 'Navigation/BACK') { 
      if (Actions.currentScene === 'Dashboard') { 
       MyModuleExitApp.finishAndroidActivity(1); 
      } 
     } 
     return defaultReducer(state, action); 
    }; 

}; 

이제 앱이 종료되고 스플래시 화면에서 다시 시작됩니다.