まず、マニフェストファイルでアクティビティの階層を定義します。
以下の通りに子アクティビティにmeta-dataを追加します。
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.notificationsample.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.notificationsample.NotificationActivity" android:label="@string/title_activity_notification" > <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> <!-- 子アクティビティに以下のような meta-dataを追加する。以下の場合、親アクティビティにMainActivityを設定している。 --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity"/> </activity> </application>
次にTaskStackBuilderでbackスタックを作成し、PendingIntentを取得します。
その取得したPendingIntentをsetContentIntent()の引数に指定して通知を表示します。
// 以下は、通知ドロワークリック時にNotificationActivityを表示する場合のコード // TaskStackBuilderを作成 TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(NotificationActivity.class); // スタックにNotificationActivityの親アクティビティを追加 // TaskStackBuilder.addNextIntent()でNotificationActivityをスタックに追加 Intent intent = new Intent(this, NotificationActivity.class); stackBuilder.addNextIntent(intent); // TaskStackBuilder.getPendingIntent()でPendingIntentを取得 PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_CANCEL_CURRENT); // 通知を表示 NotificationCompat.Builder builder = new NotificationCompat.Builder(this); builder.setSmallIcon(R.drawable.ic_launcher); builder.setContentTitle("notification title"); builder.setContentText("notification text."); builder.setTicker("notification ticker"); builder.setContentIntent(pendingIntent); int notifyID = 1; NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); manager.notify(notifyID, builder.build());上記のコードで表示した通知ドロワーをクリックすると、まずNotificationActivityが表示されます。
そこでbackボタンを押すと、NotificationActivityの親アクティビティであるMainActivityが表示されます。
TaskStackBuilder.addNextIntent()は複数回呼び出すことができ、
最後に渡したIntentのアクティビティが最初に表示されるアクティビティになります。
例えば、.addNextIntent(A)→.addNextIntent(B)→.addNextIntent(C)と呼び出すと、
A、B、Cの順にスタックに追加され、
[ドロワークリック]→C表示→[backボタン押下]→B表示→[backボタン押下]→
A表示→[backボタン押下]→Aの親アクティビティ表示
という動作になります。
0 件のコメント:
コメントを投稿