我已使用意图过滤器为我的应用设置了自定义网址方案。当我的WebView中的URL更改为我的自定义方案(mockup:// pagechange)时,intent过滤器会正确地过滤我的应用程序的意图,启动我的活动的新实例。但是,我实际想要的是,intent过滤器在现有活动中运行一段代码而不是启动新活动。这是可能的,如果是这样,我该如何设置?如果没有,当我的WebView中的URL更改为以'mockup'开头的任何内容时,有关如何完成运行代码任务的任何其他想法?
我已尝试在intent过滤器中使用其他操作,但我尝试过的那些操作(RUN和ATTACH_DATA)导致当网址更改时,我的WebView中显示“网页不可用”页面。此外,我在这里找到的所有意图过滤器/自定义方案问题都涉及到如何使用自定义方案的网址开始新活动 - 这使得搜索相反很难。
谢谢!
答案 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;
}
});