【问题标题】:Launching Activity from Widget first stops app from launching the same activity从 Widget 启动 Activity 首先会阻止应用启动相同的 Activity
【发布时间】:2011-07-13 21:04:06
【问题描述】:

我的 Android 应用有一个非常奇怪的行为。以下是发生的事情:

如果我“启动”应用程序(单击其图标)并通过 startActivity(Intent) 启动一个活动,它工作正常。如果我然后添加一个小部件并单击它以通过 setOnClickPendingIntent() 启动相同的意图,它也可以正常工作。

现在,如果我点击后退按钮直到应用程序“关闭”(即我回到主屏幕)并点击小部件,则 Activity 显示正常。但是,当我尝试从应用程序内启动相同的活动/意图时,它不再起作用。活动没有开始,我仍然在同一个屏幕上。我调试了代码,startActivity(Intent) 方法的调用与之前完全一样(正在执行完全相同的代码)。

如果我返回主屏幕并再次“启动”应用程序(单击其图标),一切都会恢复正常。

关于可能导致问题的任何想法。

手机是安卓 2.3.3。并且该应用是针对 Android 2.1-update1(API 级别 7)构建的。

【问题讨论】:

  • P.S.日志中没有错误。它实际上从 pid 5840 输出“07-13 17:19:44.371: INFO/ActivityManager(108): Starting: Intent { act=xyNEWS_DETAIL flg=0x10000000 cmp=xy/.activity.NewsDetail (has extras) } ”但是随后什么都没有发生。

标签: android widget


【解决方案1】:

我发现了问题所在。

小部件通过设置标志 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 来启动意图;

在我的列表视图活动中,我使用相同的标志来启动意图

Intent intent = new Intent("x.y.NEWS_DETAIL");
intent.putExtra(NewsConstants.ISSUE_ID, newsId);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);

由于某种原因,当 Activity 已在历史记录中时请求带有 FLAG_ACTIVITY_NEW_TASK 的 Activity 会阻止它显示。我通过删除标志并从当前上下文而不是应用程序上下文启动意图来修复代码:

 Intent intent = new Intent("x.y.NEWS_DETAIL");
 intent.putExtra(NewsConstants.ISSUE_ID, newsId);
 startActivity(intent);

我现在必须找出该标志对 PendingIntent 的影响,以及它是否应该与小部件一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多