2012-01-25 12 views
1

私はAndroidアプリのウィジェットで作業していますが、問題が発生しました。ユーザーがウィジェットをクリックすると、最初のアクティビティ(インテントフィルタを持つアクション: 'action.MAIN'/'category.LAUNCHER'​​)を開きます(アクティビティAと呼びます)。Android:意図が間違った活動を開く

はそれをするために、私は(私のWidgetProviderクラスで)このスニペットを使用します。

Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
views.setOnClickPendingIntent(R.id.view , pendingIntent); 
私のアプリケーションが強制終了された場合、これは非常に良い作品

またはすべての活動がクローズされている場合(まで[戻る]ボタンを使用してアプリケーション終了)

問題は、いくつかのアクティビティが開いているときに発生します。アクティビティスタックが次のようになったとします。アクティビティA - >アクティビティB - >アクティビティC ウィジェットをクリックした場合、何かアプリケーションはちょうど前面に来て、アクティビティの代わりにアクティビティCが表示されます。です。 これは毎回発生しないので非常に奇妙です。

このアクティビティは、さまざまな機能へのリンクがいくつかあるため、アクティビティスタックがどのようになっていても、アクティビティAを開くには本当に必要で、別のアクティビティは必要ありません。

誰かが私を助けることができますか?

ありがとうございました。

PS:申し訳ありませんが、私の英語はかなり悪い場合、私はあなたが起動する特定の活動をしたい場合は、なぜあなたはだけではなく、動的で、特にその活動を呼び出さないベルギー

+1

あなたは次のアクティビティを開始するときにfinish()を呼び出すことができませんでしたか?それは再出現すべきではありません。 – nik431

+0

これは考えられません。これを行うと、ユーザーが戻るボタンを押すとすぐにアプリケーションが停止します。 – Valentin

答えて

0

からです。

バックスタックのアクティビティによって問題が発生しています。 Androidはあなたの活動のライフサイクルを非常に特別なやり方で管理しています。

calling finish() - 常に現在のアクティビティを開始したアクティビティに戻ります。アプリが閉じる唯一の時間は、オリジナルのアクティビティがない場合です。

+0

私はAndroidがその活動を管理する方法を知っています。問題は、自分のウィジェットからオープンしたいアクティビティ(たとえ明示的にはこのアクティビティA)を呼び出すと、アプリケーションがアクティビティCを開くことがある(アクティビティスタックがA-B-Cの場合) – Valentin

2

ウィジェットからは、システムランチャーとインテントのやりとりが多かれ少なかれ同じように行う必要があります。

FLAG_ACTIVITY_CLEAR_TOPをご利用ください。 FLAG_ACTIVITY_NEW_TASKもご覧ください。

途中でthe platform guidelinesに従うことをお勧めします。これは、ユーザーが再び上へ移動するための正しいパスをユーザーに与えることができれば、アプリに深く入り込むことができるということです。

関連する問題