在URL上运行代码更改(自定义方案)而不启动新活动

时间:2012-01-23 02:05:29

标签: android android-intent android-webview

我已使用意图过滤器为我的应用设置了自定义网址方案。当我的WebView中的URL更改为我的自定义方案(mockup:// pagechange)时,intent过滤器会正确地过滤我的应用程序的意图,启动我的活动的新实例。但是,我实际想要的是,intent过滤器在现有活动中运行一段代码而不是启动新活动。这是可能的,如果是这样,我该如何设置?如果没有,当我的WebView中的URL更改为以'mockup'开头的任何内容时,有关如何完成运行代码任务的任何其他想法?

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我最终离开了意图过滤器模式 - 我已经为我的WebView设置了一个WebViewClient来处理我的WebView中的外部链接,所以我只需在那里设置一个标志来运行我的代码,如果URL是正在加载包含我正在寻找的自定义方案:

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;
        }
    });