标题很好地解释了我的问题。我有一个正在运行的活动,当应用程序发送通知时,我想在我已经运行的活动中更改活动片段。如果在任何时候调用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中发送。
答案 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));
}