通知に従ったときにアプリがメモリにない場合、問題が発生します。バックスタックは作成されません。開発者ガイドに従った手順に従いました。見逃したビットを見せてください。そうしないとHomeActivity
、次のインテントで手動でバックスタックを作成するために、すべてのインテントをルーティングする必要があります。
AndroidManifest.xml:
<activity
android:name=".activity.HomeActivity"
android:clearTaskOnLaunch="true"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
android:icon="@drawable/actionbar_logo"
android:label="@string/activity_label_home"
android:launchMode="singleTask"
android:parentActivityName=".activity.Start"
android:windowSoftInputMode="stateAlwaysHidden" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.Start" />
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".activity.ChatActivity"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
android:label="@string/activity_label_in_chat"
android:parentActivityName=".activity.HomeActivity"
android:windowSoftInputMode="stateHidden"
tools:ignore="UnusedAttribute" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.HomeActivity" />
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.myapp.chat" />
</intent-filter>
</activity>
建物の通知:
final String chatId = cursor.getString(cursor.getColumnIndexOrThrow(MessageColumns.CHAT));
final Intent chat = new Intent(c, ChatActivity.class);
chat.putExtra(ChatActivity.EXTRA_CHAT_ID, chatId);
PendingIntent intent = TaskStackBuilder.create(c).addNextIntentWithParentStack (chat).getPendingIntent (0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder (c);
final NotificationManagerCompat nm = NotificationManagerCompat.from (c);
builder
.setSmallIcon (R.drawable.ic_stat_notification)
.setContentIntent (intent)
.setGroup (GROUP_KEY_MYAPP)
.setGroupSummary (true);
Notification notification = builder.build ();
nm.notify(NOTIFICATION_ID, notification);
アクションバーからのホームクリックの処理について:
public void onHomeActionDefault (final Activity baseActivity) {
Keyboard.close (baseActivity);
Intent upIntent = NavUtils.getParentActivityIntent (baseActivity);
if (null != upIntent) {
if (NavUtils.shouldUpRecreateTask (baseActivity, upIntent)) {
android.support.v4.app.TaskStackBuilder.create (baseActivity)
.addNextIntentWithParentStack (upIntent)
.startActivities ();
} else {
NavUtils.navigateUpTo (baseActivity, upIntent);
}
} else {
NavUtils.navigateUpFromSameTask (baseActivity);
}
}
ここに欠けているものはありますか?
インテントにフラグを追加し、アプリケーションコンテキストを使用する必要があることがわかりました。マニフェスト.xmlだけで、ターゲットクラス内のJavaでバックスタックを作成する必要はありませんでした。そこで、保留中のインテントを適切かつ一貫して構築するために、この小さなメソッドを構築しました。
public static PendingIntent addBackStack(final Context context, final Intent intent) {
TaskStackBuilder stackBuilder = TaskStackBuilder.create (context.getApplicationContext ());
stackBuilder.addNextIntentWithParentStack (intent);
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
return stackBuilder.getPendingIntent (0,PendingIntent.FLAG_UPDATE_CURRENT);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加