我一直在为这个问题苦恼。我有一个小部件,显示烹饪食谱的摘要。小部件是可点击的,因此每当用户单击它时,就会打开一个新活动,其中包含该食谱的完整说明。问题在于,有时候单击小部件时,会打开错误的活动。让我给你举个例子:
- 用户单击小部件,打开活动A
- 用户从活动A开始活动B(例如,食谱索引)。
- 用户从活动B开始活动C。
- 用户按Home键。
- 用户再次单击小部件,显示的是活动C而不是A
我尝试设置这三个标志的组合,这只解决了问题的一半:
openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
通过使用上述标志,我设法显示了正确的活动(A),直到我执行以下操作:
- 用户从小部件打开活动A
- 用户移动到活动B并通过单击新食谱打开活动A
- 向用户显示新食谱
- 用户点击主页按钮并点击小部件。
- 显示活动A(正确的活动),但是配方不同。
- 从现在开始,如果我移动到不同的活动B或C并单击主页,然后再次单击小部件,则不会显示活动A,而是显示按下主页按钮之前可见的活动。
更新:
这是我的pendingIntent:
Intent openIntent = new Intent(context, ProfanityDefinition.class);
openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
openIntent.setData(Uri.parse(openIntent.toUri(Intent.URI_INTENT_SCHEME)));
Bundle bundle = new Bundle();
bundle.putBoolean("widgetRequest", true);
openIntent.putExtras(bundle);
PendingIntent openPendingIntent = PendingIntent.getActivity(context, 0, openIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.widget_content, openPendingIntent);
谢谢
FLAG_ACTIVITY_NEW_TASK
只会将正在运行的活动带到前台。在 AndroidManifest.xml 中为ProfanityDefinition
活动设置android:taskAffinity=""
,以使其在单独的任务中运行。然后,单击小部件时将获得一个新实例。 - Nikolay ElenkovIntent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP
作为标志?'Activity A'的类名是什么? - Nikolay Elenkov