2012-01-23 21 views
1

我已经使用意向过滤器为我的应用程序设置了自定义URL方案。当我的WebView中的URL更改为我的自定义方案(mockup:// pagechange)时,intent筛选器正确地筛选了我的应用程序的意图,启动了我的活动的新实例。然而,我真正想要发生的是意图过滤器在现有活动内部运行一段代码,而不是启动一项新活动。这是可能的,如果是这样,我该如何设置?如果没有,当我的WebView中的URL改变为以'mockup'开始的任何东西时,如何完成运行代码的任务的任何其他想法?在不启动新活动的情况下在URL更改(自定义方案)上运行代码

我试图在意图过滤器中使用其他操作,但我试过(RUN和ATTACH_DATA)导致“网页不可用”页面在URL更改时显示在我的WebView中。此外,我在这里找到的所有意图过滤器/自定义方案问题都涉及如何使用自定义方案开始一个带有网址的新活动 - 这使得很难搜索相反的结果。

谢谢!

回答

1

我最终摆脱了意图过滤器模式 - 我已经为我的WebView设置了一个WebViewClient来处理在我的WebView中加载外部链接,所以我只是在那里设置一个标志来运行我的代码,正在装载包含了我要找的定制方案:

WebView wv = (WebView) findViewById(R.id.app_container); 
// [other setup] 
wv.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      if(!url.contains("mockup://")) 
       view.loadUrl(url); 
      else { 
       // run "mockup"-specific code 
      } 
      return true; 
     } 
    }); 
1

首先,在清单中添加android:launchMode="singleTop"您的活动声明。在你的意图使用标志FLAG_ACTIVITY_CLEAR_TOP。你会在onNewIntent()回调中获得意图。

请记住,在onNewIntent()中传递的意图与在getIntent()中返回的意图不同。如果您在代码的其他部分使用getIntent(),请使用onNewIntent()的intent中的setIntent。

+0

的launchMode选项当然似乎像什么,我想做的事情(不启动活动的新实例,而只是调用一个方法 - onNewIntent在()这个案例)。但我在哪里设置标志?我没有明确地创建一个新的活动,我试图将我的WebView上的URL更改的动作捕获到自定义方案 - 从未实际设置代码中的Intent对象。 –

+0

你当然是对的。只需创建一个新的活动,其唯一目的是开始其他活动。因此,在新的活动中,不要显示任何用户界面,只需在处理意图后调用startActivity并将其转发给您的单个顶级活动即可。 – dhaag23

相关问题