Android:从小部件打开错误的Activity

5

我一直在为这个问题苦恼。我有一个小部件,显示烹饪食谱的摘要。小部件是可点击的,因此每当用户单击它时,就会打开一个新活动,其中包含该食谱的完整说明。问题在于,有时候单击小部件时,会打开错误的活动。让我给你举个例子:

  1. 用户单击小部件,打开活动A
  2. 用户从活动A开始活动B(例如,食谱索引)。
  3. 用户从活动B开始活动C。
  4. 用户按Home键。
  5. 用户再次单击小部件,显示的是活动C而不是A

我尝试设置这三个标志的组合,这只解决了问题的一半:

openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

通过使用上述标志,我设法显示了正确的活动(A),直到我执行以下操作:
  1. 用户从小部件打开活动A
  2. 用户移动到活动B并通过单击新食谱打开活动A
  3. 向用户显示新食谱
  4. 用户点击主页按钮并点击小部件。
  5. 显示活动A(正确的活动),但是配方不同。
  6. 从现在开始,如果我移动到不同的活动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);

谢谢

1个回答

12

展示创建PedningIntent的代码。如果您要向活动传递额外数据,请注意,仅由额外数据不同的两个意图被视为相等。在创建PendingIntent时,您可能希望传递PendingIntent.FLAG_CANCEL_CURRENT以确保您的意图不会被重用。


由于您的活动已经在运行,FLAG_ACTIVITY_NEW_TASK 只会将正在运行的活动带到前台。在 AndroidManifest.xml 中为 ProfanityDefinition 活动设置 android:taskAffinity="",以使其在单独的任务中运行。然后,单击小部件时将获得一个新实例。 - Nikolay Elenkov
那没什么帮助...我仍然得到了活动B而不是A或者A但内容不同...这很奇怪。 - Marqs
1
它可以工作,请检查您的代码。您是否使用了Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP 作为标志?'Activity A'的类名是什么? - Nikolay Elenkov
1
我错过了Intent.FLAG_ACTIVITY_CLEAR_TOP标志 - 现在它可以工作了!谢谢! - Marqs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接