安卓:活动是使用旧的意图,如果从最近的任务启动的应用程序(Android: Activity is

2019-08-02 02:19发布

我执行的GCM。 我的应用程序有两个活动,说AB 。 我使用此代码,推出B从NotificationBar:

long when = System.currentTimeMillis();
NotificationManager notificationManager =
    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
String title = context.getString(R.string.app_name);        
Notification notification = new Notification(R.drawable.app_notification_icon, "De Centrale", when);//message
Intent notificationIntent = new Intent(context, B.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); //|Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
notification.setLatestEventInfo(context, title, msg, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);

NotificationBar打开活动B ,意图,说“B-通知意向”,然后我打开活动AB使用后退按钮,然后重新启动我BA有一个新的intent(说“BA-意图”)。 我用下面的代码:

intent = new Intent(this, B.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);              
startActivity(intent);

然后我在获得新数据B (即屏幕B刷新)。 但是,如果我按Home按钮,然后我启动从最近的应用程序应用程序,然后我老B屏幕,“B-通知意图”。 相反,我想要最新的意图,即“BA-意图”。 我使用这个代码B

@Override
protected void onCreate(Bundle b)
{
    fetchDataFromDB(getIntent());           
}

@Override
protected void onNewIntent(Intent intent)
{
    fetchDataFromDB(intent);        
}

所以,有人请帮助我让我当前屏幕(意图)。

Answer 1:

我还注意到,有时一个ActivityonCreate()是越来越陈旧Intent期从最近通话启动时,但一种方法来检查,好让你们能处理Intent适当。

protected boolean wasLaunchedFromRecents() {
    return (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY;
}

在我的愚见,该标志名为很差(其它标志引用最近通话列表实际上用这个词,如FLAG_ACTIVITY_EXCLUDE_FROM_RECENTSFLAG_ACTIVITY_RETAIN_IN_RECENTS )和文档从未更新,以反映一个事实,即许多流行的Android设备有一个最近通话专用按钮:

该标志不会被应用程序代码,如果这个活动正在从历史中(长按home键)推出通常设置,但为您设置由系统。

(注:我知道你多年前解决您的问题的另一种方式,但这个问题是“Android的老意图最近”和没有其他相关的问题提到这个标志的热门搜索结果中的一个,所以希望这回答能帮助别人。)



文章来源: Android: Activity is using old intent if launching app from Recent Task