3

次のコードを使用して通知を作成するアクティビティがあります。

Notification notification = new Notification(icon,
                        tickerText, 0);
                notification.flags |= Notification.FLAG_AUTO_CANCEL;
                Context context = getApplicationContext();
                CharSequence contentText = getString(R.string.subtitle);
                Intent notificationIntent = new Intent(getBaseContext(),
                        MainActivity.class);
                notificationIntent.putExtra("num", Integer.toString(i));
                Intent deleteIntent = new Intent(getBaseContext(),
                        DeleteActivity.class);
                deleteIntent.putExtra("num", Integer.toString(i));
                PendingIntent contentIntent = PendingIntent.getActivity(
                        getBaseContext(), ran, notificationIntent, 0);
                PendingIntent deletePendingIntent = PendingIntent
                        .getActivity(getBaseContext(), ran, deleteIntent, 0);
                notification.setLatestEventInfo(context, text, contentText,
                        contentIntent);
                notification.deleteIntent = deletePendingIntent;
                final int NOTIF_ID = ran;
                mNotificationManager.notify(NOTIF_ID, notification);

現在表示されているアプリからのすべての通知のリストを保持しています。

通知をクリックすると、MainActivity が開きます。リストから通知を削除するための onResume() のコードがあります。これはうまくいきます。

通知が閉じられると、DeleteActivity がトリガーされ、リストからも削除されます。これもうまくいきます。

問題は、MainActivity が既に開いていて、通知がクリックされた場合、onResume() が再度実行されないため、通知は消えますが、アプリが表示していると考えている通知のリストからは削除されません。

インテントを受け取ったときに、特定のコードを実行する (またはアクティビティ全体を再起動する) 方法があるかどうか疑問に思っています。代わりに DeleteActivity を使用するように設定できることはわかっていますが、MainActivity を開いたほうがよいでしょう。

4

1 に答える 1

3

onNewIntentをオーバーライドすることで、アクティビティの通知クリックをキャッチできます。これは私のアプリで行うことです。

于 2012-10-29T14:25:38.133 に答える