まず、マニフェストファイルでアクティビティの階層を定義します。
以下の通りに子アクティビティに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 件のコメント:
コメントを投稿