从通知启动片段而不重新启动活动

时间:2015-06-22 17:36:04

标签: android android-fragments android-intent android-notifications

标题很好地解释了我的问题。我有一个正在运行的活动,当应用程序发送通知时,我想在我已经运行的活动中更改活动片段。如果在任何时候调用MainActivity.onDestroy,那么就会出现问题。

我的问题解决方案的一个示例在Google Play商店应用中得到了证明。当Play商店在后台打开并且另一个应用/通知打开Play商店应用时,Play商店会打开您所在的最后一个片段,然后继续加载新片段,但永远不会重新开始活动。

我尝试了几种解决方案:

viewContactsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
viewContactsIntent.setAction(Intent.ACTION_MAIN);
viewContactsIntent.addCategory(Intent.CATEGORY_LAUNCHER);

并将android:launchMode="singleTop添加到清单中的MainActivity标记。

到目前为止没有人工作过。

感谢。

编辑:

深入了解用于构建通知的代码。

Class viewContacts  = MainActivity.class;
Intent viewContactsIntent   = new Intent(context, viewContacts);
TaskStackBuilder sbViewContacts   = TaskStackBuilder.create(context);
sbViewContacts.addParentStack(viewContacts).addNextIntent(viewContactsIntent);
int piFlag = PendingIntent.FLAG_UPDATE_CURRENT;
PendingIntent piViewContacts  = sbViewContacts.getPendingIntent(0, piFlag);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context).setContentIntent(piViewContacts);

此通知在接到电话时从PhoneStateListener中发送。

1 个答案:

答案 0 :(得分:0)

只需将活动的launchMode设置为单个isntance:

android:launchMode="singleInstance"

使用intent调用startActivity而不设置任何自定义标志。

现在,如果正在启动的活动已经开始运行,它将被带到前面,并且会调用其onNewIntent,意图传递给startActivity

开始活动:

Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("is okay", true);
startActivity(intent);

收到新意图:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.e(TAG, "Okay: " + intent.getBooleanExtra("is okay", false));
}