【问题标题】:Correct intent flags to use正确使用意图标志
【发布时间】:2013-09-29 01:06:14
【问题描述】:

在加载 Webview 的主 Activity 中,根据启动它的位置确定要加载的 url。

Bundle extras = getIntent().getExtras();
       if (extras != null) {
           String theurl =  getIntent().getExtras().getString("url");
            webView.loadUrl(theurl);    
       } else {
             webView.loadUrl("http://mysite.com");
       } 

如果应用程序是新实例并从主屏幕加载,它会加载默认 url。

如果应用程序未运行并且我单击通过谷歌云消息发送的通知,应用程序将加载自定义 URL。

按预期运行。

我的问题在于当应用程序已经在后台运行时,当我单击通知时,它会将应用程序带到最前面但不会加载新的 url,它保持默认。

我对标志不太确定,我之前确实遇到过这个问题,是某种标志组合解决了这个问题。

        Intent notificationIntent = new Intent(context, MainActivity.class);
    notificationIntent.putExtra("url", url);

    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );

    int requestID = (int) System.currentTimeMillis();

    PendingIntent intent = PendingIntent.getActivity(context, requestID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);

我们将不胜感激。

编辑

如果我添加标志 PendingIntent.FLAG_CANCEL_CURRENT 这几乎可以解决问题,虽然它重新加载整个主要活动(启动屏幕被调用),但我希望它重用现有的 webview。

【问题讨论】:

    标签: android android-intent android-pendingintent


    【解决方案1】:

    这是您要查找的标志:FLAG_ACTIVITY_CLEAR_TASK

    如果在传递给 Context.startActivity() 的 Intent 中设置,此标志将 导致与活动相关联的任何现有任务 在活动开始之前被清除。也就是活动 成为一个空任务的新根,任何旧的 活动结束。这只能与 FLAG_ACTIVITY_NEW_TASK。

    编辑: 如果您将 webview 代码放在 onResume 中,然后不使用任何标志,它应该可以正常工作。

    【讨论】:

    • 我刚刚尝试了您的建议。这会重新加载整个活动(启动画面)。我希望它重用现有的 webview 并简单地更改 url。
    • 嗯,我删除了所有标志并移动了 webview,尽管它仍然无法正常工作,但我很确定我上次的解决方案是类似的,但我不记得必须将整个 webview 移动到简历。很可能是我犯的一个愚蠢的错误,现在是凌晨 3 点,所以我会睡在上面,然后在早上再次攻击它。
    • @Guernica 好的,明天应该可以工作了,如果你能发布你更新的代码,我可以看看它
    • 是的,我会在早上发布我的代码,问题似乎是当在 onresume 内部时,通过意图(url)传递的额外数据丢失了。
    • 是的,我尝试了几种不同程度的成功方法,但没有完全成功。谢谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2022-01-08
    相关资源
    最近更新 更多