从通知启动应用程序将其从最近的应用程序历史中删除

当我从通知开始时,我的某个应用程序出现问题。 它从不出现在“最近的应用程序”列表中。

没有通知,每一件事都按预期工作:我启动应用程序,导航到,当我离开它(与主页button或后退button)之后,我可以回到它与长按首页button=>确定。

当我收到通知时,问题就开始了。 如果我从通知启动应用程序,它会启动正确的屏幕,我可以使用应用程序=>确定。 但是,当我退出应用程序(与家或后退button)它不会出现在“最近的应用程序”列表中。 更确切地说:

  • 如果应用程序出现在“最近的应用程序”列表中,然后从通知中启动应用程序,则会将其删除
  • 如果应用程序不在“最近的应用程序”列表中,它不会添加它

下面,我的原始代码添加状态栏中的通知:

mNotification = new Notification(R.drawable.ic_notif, message, System.currentTimeMillis()); mNotification.flags |= Notification.FLAG_AUTO_CANCEL; Intent notificationIntent = new Intent(Intent.ACTION_VIEW,Uri.parse(link)); notificationIntent.putExtra(...); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); mNotification.setLatestEventInfo(context, context.getString(R.string.app_name), message, contentIntent); notificationManager.notify(ConfigApp.NOTIFICATION_ID, mNotification); 

我尝试添加一个FLAG_ACTIVITY_NEW_TASK,但没有帮助:

 Intent notificationIntent = new Intent(Intent.ACTION_VIEW,Uri.parse(link)); notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); notificationIntent.putExtra(...); 

通知开始的清单声明:

 <activity android:name=".activity.ActivityMessages" android:label="" android:windowSoftInputMode="stateHidden"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:host="hostapp" android:pathPrefix="/prefixapp" android:scheme="schemeapp" /> </intent-filter> </activity> 

有没有人知道如何保持应用程序在“最近的应用程序”列表后开始形成通知?

Solutions Collecting From Web of "从通知启动应用程序将其从最近的应用程序历史中删除"

将动作android.intent.action.MAIN和类别android.intent.category.LAUNCHER到您的活动规范中。 有两个行动和类别看起来像一个黑客,但它实际上是由Android支持 。

 <activity android:name=".activity.ActivityMessages" android:label="" android:windowSoftInputMode="stateHidden"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <data android:host="hostapp" android:pathPrefix="/prefixapp" android:scheme="schemeapp" /> </intent-filter> </activity> 

这应该将其添加到最近的应用程序列表中。 Android开发者文档中描述了这个原因:

这种意图filter会在应用程序启动器中显示活动的图标和标签, 为用户提供一种启动活动并返回到启动后任何时间创build的任务的方式

第二个能力是重要的:用户必须能够离开任务,然后使用这个活动启动器回来。 出于这个原因,只有当活动有一个ACTION_MAIN和一个CATEGORY_LAUNCHERfilter时,才应该使用两种启动模式来标记活动始终启动一个任务“singleTask”和“singleInstance”。想象一下,例如,如果发生什么filter丢失:一个意图启动一个“singleTask”活动,启动一个新的任务,用户花费一些时间在这个任务上工作,然后用户按下Homebutton,这个任务现在被发送到背景,不可见。现在用户无法返回任务,因为它没有在应用程序启动器中表示。

尝试添加清单如下:

 android:excludeFromRecents = "false" 

祝你好运,路易斯

您需要为每个操作/类别对使用单独的Intent Filters

 <activity android:name=".activity.ActivityMessages" android:label="" android:windowSoftInputMode="stateHidden"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:host="hostapp" android:pathPrefix="/prefixapp" android:scheme="schemeapp" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <data android:host="hostapp" android:pathPrefix="/prefixapp" android:scheme="schemeapp" /> </intent-filter> </activity> 

我碰到同样的问题。 问题是我的活动有android:label =“” 。 当我从通知中打开活动时,它将使用当前的应用程序任务replace根活动。 Android从最近排除了具有空标签的活动(请参阅源代码 )。

要隐藏活动的标题,您应该使用:

 getActionBar().setDisplayShowTitleEnabled(false); 

老主题,但我发现的解决scheme(我无法在网上find任何人),也许这将有助于某人。 它不可能将任何活动设置为父级,但我认为(不确定)是否可以通过编程方式(在OpenFromNotificationActivity中)对其进行更改(如果有必要)。

在清单中

 <activity android:name=".OpenFromNotificationActivity" android:label="@string/label"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".StartSplashActivity" /> </activity> <activity android:name=".StartSplashActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

检查是否来自通知

 if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0)