3

1つのインスタンスのみが存在するようにsingleTopとして定義されているアクティビティがあります。

   <activity
        android:name=".MyMainActivity"
        android:label="@string/app_name" 
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
        android:launchMode="singleTop" android:multiprocess="true">

いくつかのデータを使用して通知インテントを設定し、それをPendingIntentに含めて、通知マネージャーに送信します。

Intent notificationIntent = new Intent(context, MyMainActivity.class); 
notificationIntent.setAction(MyMainActivity.CustomInternalMessageAction);
notificationIntent.putExtra(MyMainActivity.ReceiveTestMessage, rawMessageText);

...
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
mNotificationManager.notify(number, notification);  

アクティビティが実行されていない場合、インテントは期待どおりにonCreate()を介してアクティビティを開始します。

アクティビティが実行されているが、停止状態/フォアグラウンドではなく(ホームボタンをクリックしたときなど)、通知がクリックされた場合、アクティビティのonNewIntent()が期待どおりに呼び出されます。

ただし、アクティビティがフォアグラウンドにあるときにすでに呼び出されている場合、onNewIntent()は呼び出されません。

一時停止/停止状態のときにsingleTopアクティビティにインテントが送信されるように、この通知を設定するにはどうすればよいですか(また、前述した他の場合でも機能します)。NotificationIntentオブジェクトに設定するフラグがあると思いますが、singleTopアクティビティの場合、フラグの機能は実際には明確ではありません。

4

1 に答える 1

8

アプリケーションが複数のアクティビティで構成されている場合、そのアクティビティがアクティブなときに呼び出しsingleTopを受信する場合は、残りのアクティビティも定義する必要があります。onNewIntent()

メインアクティビティがAとして定義され、そこから、として定義されていないsingleTopアクティビティを開始するとします。ここで、アプリケーションを呼び出す通知を選択すると、アプリケーションはアクティビティで開始されますが、呼び出されません。BsingleTopBonNewIntent()

スタックからアクティビティIntent.FLAG_ACTIVITY_CLEAR_TOPを削除するフラグを追加してこの動作をオーバーライドすることもできます。アクティビティはで呼び出しを受け取ります。BAonNewIntent()

于 2012-10-12T17:01:31.983 に答える