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

时间:2011-09-28 09:16:03

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

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

  1. 用户点击小部件并打开活动A
  2. 用户从活动A开始活动B(例如食谱索引)。
  3. 用户从活动B开始活动C.
  4. 用户按下主页按钮。
  5. 用户再次点击窗口小部件,显示活动C而不是A
  6. 我尝试设置这三个标志的组合,这有助于解决问题的一半:

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

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

    1. 用户从小部件
    2. 打开活动A.
    3. 用户移至活动B并通过单击新配方
    4. 打开活动A.
    5. 向用户显示新配方
    6. 用户点击主页按钮并点击小部件。
    7. 显示活动A(右侧)但配方不同。
    8. 从现在开始,如果我移动到不同的活动B或C并再次单击主页然后再显示小部件,则不会显示活动A,而是显示在按主页按钮之前可见的活动A.
    9. 我希望我能够详细解释它。我真的很感谢你的帮助,因为这件事让我发疯了!

      更新

      这是我的待处理内容:

      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 个答案:

答案 0 :(得分:12)

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