2017-12-29 21 views
0

私は、デバイスがロックされ、アプリケーションが閉じられたときに呼び出されるべき独立した画面を作成しようとしているReact Nativeで作業しています。私のコードが続きAndroidのアクティビティ複数のインスタンス

UnlockScreenActivity.java

public class UnlockScreenActivity extends ReactActivity { 
// public class UnlockScreenActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
     | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

     setContentView(R.layout...); // the xml layout 

     final ReactContext reactContext = getReactInstanceManager().getCurrentReactContext(); 

     Button openBtn = (Button) findViewById(R.id.accept_call_btn); 
     openBtn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ... 
      } 
     }); 

     Button closeBtn = (Button) findViewById(R.id.reject_call_btn); 
     closeBtn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ... 
       finish(); 
      } 
     }); 
    } 

    private void sendEvent(ReactContext reactContext, String eventName, WritableMap params) { 
     reactContext 
     .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) 
     .emit(eventName, params); 
    } 
} 

のAndroidManifest.xmlは:

私は私の画面を呼び出す方法
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    ... 
    <application 
     android:name=".MainApplication" 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:launchMode="singleTop" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".MainActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
      android:label="@string/app_name" 
      android:windowSoftInputMode="adjustResize"> 
      ... 
     </activity> 
     ... 
     <!-- none of this worked --> 
     <!-- android:launchMode="singleInstance" --> 
     <!-- android:launchMode="singleTask" --> 
     <activity android:name=".UnlockScreenActivity" android:noHistory="true" /> 
     ... 
    </application> 
</manifest> 

私は、単一のインスタンスでそれを得るにはどうすればよい

enter image description here

:画面が開いたら

Intent i = new Intent(context, UnlockScreenActivity.class); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); // still the same 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // still the same 
i.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); // still the same 
startActivity(i); 

は、私はアプリは2つのインスタンスを持っていることを参照してください?

UPDATE

これは私が管理し、これまでのところ、それはAndroidManifest.xmlを

// ReactApplicationContext context 
Intent i = new Intent(context, UnlockScreenActivity.class); 
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 

を働いている方法です:

<activity 
    android:name=".UnlockScreenActivity" 
    android:label="@string/app_name" 
    android:launchMode="singleTop" 
    android:persistableMode="persistNever" 
    android:autoRemoveFromRecents="true" /> 
+0

これは、あなたがこのことについて何を知っていますか、あなたは –

+0

@vikaskumar、W0rmH0le @まだ股関節同じ – Pablo

+0

をFLAG_ACTIVITY_SINGLE_TOP助けるかもしれませんか? – Pablo

答えて

0

あなたは、このいずれかを試してください。

Intent i = new Intent(context, MainActivity.class); 
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(i); 

また、メインアクティビティでは、マニフェストのルートにsingletaskを追加できます。

<activity .. 
     android:launchMode= "singleTask" /> 
+0

私はすべてのプロセスを停止し、アプリケーションを削除してもう一度実行しました。それでも同じです。 #sad – Pablo

+0

簡単なインテントでstartActivityForResultを使ってアンサースクリーンアクティビティを開始してください。 –

+0

'' 'Intent(context、MainActivity.class)' 'を実行すると、メイン画面(react-native)のみが開きます。それはあなたが期待していることですか?ところで、 "' '意図=新しい意図...' 'それは別のクラスで呼ばれているのですが大丈夫ですか? – Pablo

関連する問題