Android:从小部件打开错误的活动

Mar*_*rqs 5 android widget android-intent android-activity android-pendingintent

我一直在努力解决这个问题.我有一个小部件,显示烹饪食谱的摘要.小部件是可点击的,因此每当用户点击它时,就会打开新活动,并附上该食谱的完整描述.问题是,有时单击小部件时会打开错误的活动.让我给你举个例子:

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

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

openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Run Code Online (Sandbox Code Playgroud)

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

  1. 用户从窗口小部件打开活动A.
  2. 用户移动到活动B并通过单击新配方打开活动A.
  3. 向用户显示新配方
  4. 用户单击"主页"按钮并单击窗口小部件.
  5. 显示活动A(右侧)但配方不同.
  6. 从现在开始,如果我移动到不同的活动B或C并再次单击"主页"然后再单击"窗口小部件",则不显示活动A,而是显示在按"主页"按钮之前可见的活动A.

我希望我能够详细解释它.我非常感谢你的帮助,因为这件事让我发疯!

更新:

这是我的待处理内容:

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);
Run Code Online (Sandbox Code Playgroud)

谢谢

Nik*_*kov 12

显示创建代码的代码PedningIntent.如果您将额外内容传递给您的活动,请注意两个仅由额外内容不同的意图被视为等效.您可能希望PendingIntent.FLAG_CANCEL_CURRENT在创建时传递,PendingIntent以确保不重用您的意图.