简体   繁体   English

没有从Notification PendingIntent创建Android后台堆栈

[英]Android back-stack not being created from Notification PendingIntent

I'm having issue if the app isn't in memory when the notification is followed. 如果在遵循通知时应用程序不在内存中,我就会遇到问题。 The backstack won't be created. 不会创建backstack。 I've followed the steps according to the developers guide. 我按照开发人员指南按照步骤操作。 Please show me the bit I've missed otherwise I'll have to route all intents through my HomeActivity in order to create the backstack manually on following intent. 请告诉我我错过的位,否则我将不得不通过我的HomeActivity路由所有意图,以便按照以下意图手动创建backstack。

AndroidManifest.xml : 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>

Building notification : 建筑通知

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);

On handling home click from actionbar : 从操作栏处理主页点击

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);
    }
}

Is there something I'm missing here? 这里有什么我想念的吗?

It turns out that I needed to add a flag to the intent and use the application context. 事实证明,我需要为intent添加一个标志并使用应用程序上下文。 I didn't need the whole creation of the backstack in java inside the target class, just in the manifest.xml. 我不需要在目标类中的java中完全创建backstack,只需要在manifest.xml中。 So I built this little method to build the pending intents properly and consistently for me. 所以我构建了这个小方法来为我正确且一致地构建待定意图。

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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM