我一直在为这个问题苦苦挣扎一段时间。我有一个显示 cooking 食谱摘要的小部件。该小部件是可点击的,因此每当用户点击它时,都会打开新 Activity ,其中包含该食谱的完整描述。问题是有时单击小部件时会打开错误的 Activity 。让我举个例子:
- 用户点击小部件并打开 Activity
- 用户从 Activity A 开始 Activity B(例如食谱索引)。
- 用户从 Activity B 开始 Activity C。
- 用户按下主页按钮。
- 用户再次点击小部件,显示 Activity C 而不是 A
我尝试设置这三个标志的组合,这只有助于解决一半的问题:
openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
通过使用上面的标志,我设法显示正确的 Activity (A),直到我执行以下操作:
- 用户从小部件打开 Activity A
- 用户移动到 Activity B 并通过点击新食谱打开 Activity A
- 向用户显示新配方
- 用户点击主页按钮并点击小部件。
- Activity A 已显示(正确的),但配方不同。
- 从现在开始,如果我移动到不同的 Activity B 或 C 并单击主页,然后再次点击小部件, Activity A 将不会显示,但会显示在按下主页按钮之前可见的 Activity 。
我希望我解释得足够详细。我真的很感谢你的帮助,因为这件事让我发疯!
更新:
这是我的 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);
谢谢
最佳答案
显示创建 PedningIntent
的代码。如果您要将 extras 传递给您的 Activity ,请注意仅 extras 不同的两个 Intent 被视为等同的。您可能希望在创建 PendingIntent
时传递 PendingIntent.FLAG_CANCEL_CURRENT
以确保您的 Intent 不会被重复使用。
关于Android:从小部件打开错误的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7580931/