当我从通知中启动时,我的某个应用中存在问题。它永远不会出现在“最近的应用”列表中。
没有通知,每件事都按预期工作:我启动应用程序,导航进入,当我退出它时(使用主页按钮或后退按钮)之后我可以长按主页按钮=>返回到它确定。
当我收到通知时,问题就开始了。如果我从通知启动应用程序,它会启动正确的屏幕,我可以使用app =>好。但是当我退出应用程序(使用主页或后退按钮)时,它不再出现在“最近的应用程序”列表中。更确切地说:
下面是我在状态栏中添加通知的原始代码:
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>
有人知道如何在通知开始后将应用保留在“最近的应用”列表中吗?
答案 0 :(得分:8)
将操作android.intent.action.MAIN
和类别android.intent.category.LAUNCHER
添加到您的活动规范中。有两个动作和类别似乎是一个黑客,但它是actually supported by 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 developer documentation:
中描述此类意图过滤器会导致图标和标签 要在应用程序启动器中显示的活动,为用户提供 启动活动并返回其创建的任务的方法 它发布后的任何时候。
第二种能力很重要:用户必须能够完成任务 然后使用此活动启动器返回到它。 为此 原因是,两种启动模式将活动标记为始终启动 任务,“singleTask”和“”singleInstance“,只应在使用时使用 该活动有一个ACTION_MAIN和一个CATEGORY_LAUNCHER过滤器。 想象一下,例如,如果过滤器丢失会发生什么:An intent启动“singleTask”活动,启动新任务,以及 用户花费一些时间在该任务中工作。然后用户按下 主页按钮。任务现在发送到后台,而不是 可见。现在用户无法返回任务,因为它是 没有在应用程序启动器中表示。
答案 1 :(得分:0)
尝试向清单添加以下内容:
android:excludeFromRecents = "false"
祝你好运,
路易斯
答案 2 :(得分:0)
您需要为每个操作/类别对使用单独的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>
答案 3 :(得分:0)
我碰到了同样的问题。问题是我的活动有 android:label =“”。当我从Notification中打开Activity时,它会将app任务中的root活动替换为当前的活动。并且Android排除了来自最近的空标签活动(参见source code)。
要隐藏您应该使用的活动标题:
getActionBar().setDisplayShowTitleEnabled(false);
答案 4 :(得分:0)
旧主题,但我发现了解决方案(我无法在网络中找到任何人),也许这对某人有帮助。它没有提供将任何活动设置为父级的可能性,但我认为(不确定)您可以在必要时以编程方式(在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>
答案 5 :(得分:0)
检查是否来自通知
if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0)