2

次のシナリオ: ホーム画面に 3 つの同じウィジェットがあります。いずれかがクリックされると、ウィジェット構成アクティビティが開始されます。

これは、次のコードによって実装されました。

Intent intent = new Intent(context, WidgetConfigurator.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setOnClickPendingIntent(R.id.widget_linearlayout, pendIntent);

起動は機能していますが、1 つの問題があります:
1. ウィジェット A がクリックされ、ウィジェット A の構成アクティビティが開かれる
2. ユーザーが「戻る」キーを押すと、構成アクティビティが消える
3. ウィジェット B がクリックされ、ウィジェット B の構成アクティビティが開かれる開いた
4. ユーザーが「戻る」キーを押す
=> ウィジェット A の構成アクティビティが表示されます

私は常に「実際の」構成アクティビティ (クリックされたウィジェットに適合) のみを表示したいと考えています。Intent / PendingIntent にはどの設定を使用する必要がありますか?

任意の助けのためのthx

4

3 に答える 3

3

Android がインテントを再利用するため、保留中のインテント コードを変更してウィジェット ID を含めます。クリックすると間違った意図が送信されて、これに何時間も無駄にしました。

PendingIntent pendIntent = PendingIntent.getActivity(context, WIDGETID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
于 2012-11-30T07:47:39.963 に答える
3

多くのことを試した後、すべてのAndroidバージョンで機能するソリューションを見つけたようです:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setOnClickPendingIntent(R.id.widget_linearlayout, pendIntent);
于 2012-11-25T19:01:02.053 に答える
0

現在のアクティビティを確実に閉じる方法は、finish()を呼び出すことです。Androidアプリはスタックのように構築され、アクティビティAが開始されます。ユーザーが反撃した場合、このアクティビティは終了しません。新しく開始されたアクティビティBの下にあります。ユーザーがアクティビティBに戻った場合、アクティビティAが表示されます。私はこれを試したことはありませんが、onBackPressedメソッドでfinishを呼び出すと、現在のアクティビティが閉じられます。これを行うには、アクティビティでonBackPressedをオーバーライドします。

于 2012-11-25T14:07:07.690 に答える