0

デバイスにアプリケーションがインストールされています。次のコードを使用して、別のアプリケーションBのボタンクリックからこのアプリケーションAを起動しようとしています。

Button buttonStart = (Button)findViewById(R.id.buttonStart);
    buttonStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            intent.setClassName("co.abc.android.test",
                    "co.abc.android.test.Abc");
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);

        }
    });

以下は私の問題です:

  • アプリケーションAを起動します

  • ホームボタンを押す

  • アプリケーションBのボタンonclickから、アプリAを再度起動します

  • 戻るボタンを押して、アプリBから起動されたアプリケーションAを終了します。
  • 戻るボタンを押してアプリケーションAを終了しましたが、最初に起動したアプリAのメインアクティビティに再び移動します。

この問題を参照する際に、 Intent.FLAG_ACTIVITY_CLEAR_TOPを使用 するとこれが解決されることを多くの場所で読みました。しかし、コンテキストにアクセスできない場所からアプリAのインテントを呼び出すため、次のエラーが発生します。

01-01 00:09:54.694: ERROR/AndroidRuntime(283): *** FATAL EXCEPTION IN SYSTEM PROCESS: WindowManagerPolicy
    android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
    at android.app.ContextImpl.startActivity(ContextImpl.java:884)
    at com.android.internal.policy.impl.LockScreen$DialerMethods.onTrigger(LockScreen.java:218)
    at com.android.internal.widget.multiwaveview.Dialer$2.run(Dialer.java:366)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at com.android.server.wm.WindowManagerService$PolicyThread.run(WindowManagerService.java:752)

戻るボタンを押したときに同じアクティビティ(以前に起動した場合)が再度表示されないように、この問題を解決するにはどうすればよいですか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

内部onClickメソッドを追加してみてください:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
于 2012-07-03T13:17:16.453 に答える
0

別のアプリケーションを起動する最良の方法は次のとおりです。

Intent intent = new Intent();
intent.setClassName("co.abc.android.test", "co.abc.android.test.Abc");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);

これは、ユーザーが利用可能なアプリのリストからアプリケーションを選択したときの Android の動作をシミュレートします。

「co.abc.android.test.Abc」がそのアプリケーションのルート アクティビティ (つまり、 intent-filter を持つものACTION_MAIN/CATEGORY_LAUNCHER) であると仮定すると、これはアプリケーションを開始する (まだ実行されていない場合) か、単にアプリケーションを起動します。バックグラウンドからフォアグラウンドへ (既に実行されている場合)。

于 2012-08-24T17:01:20.947 に答える