正确的意图标志使用

时间:2013-09-29 01:06:14

标签: android android-intent android-pendingintent

在我的主活动中加载Web视图,具体取决于它的启动位置决定了要加载的网址。

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

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

如果应用程序未运行,并且我点击通过Google云消息发送的通知,则应用程序会加载自定义网址。

这符合预期。

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

我对Flags不太确定,我之前确实遇到过这个问题,它是一个固定它的标志组合。

        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这几乎解决了这个问题,虽然它重新加载了整个主要活动(Splash屏幕被调用),我希望它重用现有的webview。

1 个答案:

答案 0 :(得分:1)

这是您正在寻找的旗帜:FLAG_ACTIVITY_CLEAR_TASK

  

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

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