Android:从小部件打开错误的活动
Posted
技术标签:
【中文标题】Android:从小部件打开错误的活动【英文标题】:Android: Opening wrong Activity from the widget 【发布时间】:2011-11-26 17:05:56 【问题描述】:我已经为这个问题苦苦挣扎了一段时间。我有一个显示烹饪食谱摘要的小部件。该小部件是可单击的,因此每当用户单击它时,都会打开带有该配方的完整描述的新活动。问题是,有时单击小部件时会打开错误的活动。举个例子吧:
-
用户点击小部件并打开活动 A
用户从活动 A 开始活动 B(例如食谱索引)。
用户从活动 B 开始活动 C。
用户按下主页按钮。
用户再次点击小部件,显示活动 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);
谢谢
【问题讨论】:
【参考方案1】:显示创建PedningIntent
的代码。如果您将额外内容传递给您的活动,请注意只有额外内容不同的两个意图被视为等效。您可能希望在创建 PendingIntent
时传递 PendingIntent.FLAG_CANCEL_CURRENT
以确保您的意图不会被重用。
【讨论】:
由于您的任务活动已经在运行,FLAG_ACTIVITY_NEW_TASK
只会将正在运行的活动带到前台。在 androidManifest.xml 中为 ProfanityDefinition
活动设置 android:taskAffinity=""
以使其在单独的任务中运行。然后,您将在单击小部件时获得一个新实例。
这没有帮助...我仍然得到活动 B 而不是 A 或 A 内容不同...这很奇怪
它有效,请检查您的代码。您是否使用 Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TOP` 作为标志? 'activity A' 的类名是什么?
我缺少 Intent.FLAG_ACTIVITY_CLEAR_TOP 标志 - 它有效!谢谢!以上是关于Android:从小部件打开错误的活动的主要内容,如果未能解决你的问题,请参考以下文章
onActivityResult 从未从小部件启动的活动中调用