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

标签 android android-activity android-intent widget android-pendingintent

我一直在为这个问题苦苦挣扎一段时间。我有一个显示 cooking 食谱摘要的小部件。该小部件是可点击的,因此每当用户点击它时,都会打开新 Activity ,其中包含该食谱的完整描述。问题是有时单击小部件时会打开错误的 Activity 。让我举个例子:

  1. 用户点击小部件并打开 Activity
  2. 用户从 Activity A 开始 Activity B(例如食谱索引)。
  3. 用户从 Activity B 开始 Activity C。
  4. 用户按下主页按钮。
  5. 用户再次点击小部件,显示 Activity C 而不是 A

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

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

通过使用上面的标志,我设法显示正确的 Activity (A),直到我执行以下操作:

  1. 用户从小部件打开 Activity A
  2. 用户移动到 Activity B 并通过点击新食谱打开 Activity A
  3. 向用户显示新配方
  4. 用户点击主页按钮并点击小部件。
  5. Activity A 已显示(正确的),但配方不同。
  6. 从现在开始,如果我移动到不同的 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/

相关文章:

java - Kotlin 的 Intent

android - 引入数据绑定(bind)后无法运行仪器测试

android - 如何设置文本右侧的复选框

java.lang.ClassCastException : android. 部件.EditText

android - 通过 Intent 将地址传递给谷歌地图 Activity :

java - 在更改屏幕方向时,创建了新 Activity

android - Material 设计中缺少 ActionBar

php - 从安卓手机发布到服务器

java - 简单的 Android Activity 导致崩溃

java - 从应用程序上下文启动 Activity 时的风险?