在我的@L_404_0@应用中,我有一个WebVIEw.我希望在WebVIEw中单击每个链接以在设备上启动注册的应用程序(如果有),否则请在外部浏览器中打开.例如,如果用户在WebVIEw中单击Facebook页面链接,则它应启动Facebook应用程序(如果在设备上注册了facebook以处理facebook链接).如果未注册任何应用程序,则应启动外部浏览器(即,不应将页面加载到同一WebVIEw中).
当前(默认情况下),WebVIEw只会在其内部加载WebVIEw中单击的任何链接.
我意识到我需要重写shouldOverrIDeUrlLoading来拦截那些链接点击:
webVIEw.setWebVIEwClIEnt(new WebVIEwClIEnt() { @OverrIDe public boolean shouldOverrIDeUrlLoading(WebVIEw vIEw, String url) { // what should go here to trigger the registered app or fall back to external browser for all link clicks in the WebVIEw? }});
我还查看了意图过滤器,但这似乎与该要求相反(意图过滤器似乎是我注册我的androID应用程序以处理其他地方的网络点击的一种方式).
更新1:
我不想拦截任何特定的主机名或方案-我希望在Web视图中单击的每个链接都被“委派”到androID,其中androID决定是否启动注册的应用,并d出供用户选择的选项在哪个应用程序中打开或在网络浏览器中打开,具体取决于用户设置.
具体来说,如果我单击指向https://www.facebook.com/blah的链接,则它将在Facebook应用程序中启动,并带我到那里的空白页面.
解决方法:
该修复仅涉及将shouldOverrIDeUrlLoading处理为true,如果该URL不在我自己的应用程序中,则返回true.返回true时,它会根据配置的上下文启动注册的应用程序或应用程序选择器对话框或浏览器.
mWebvIEw.setWebVIEwClIEnt(new WebVIEwClIEnt() { @OverrIDe public boolean shouldOverrIDeUrlLoading(WebVIEw vIEw, String url) { boolean isLocalUrl = false; try { URL givenUrl = new URL(url); String host = givenUrl.getHost(); if(host.contains("myapp.com")) isLocalUrl = true; } catch (MalformedURLException e) { } if (isLocalUrl) return super.shouldOverrIDeUrlLoading(vIEw, url); else { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } } }
我还意识到,AndroID的当前状态(我在基于AndroID Kitkat的Xiaomi Mi 4的Miui 7上进行了测试,但论坛表明,至少对于大多数棉花糖之前的androID来说,这大致上是正确的),其中存在指向Facebook页面的链接WebVIEw无法在Facebook应用程序中打开.它也没有给用户选择在Facebook应用程序中打开的选项.以前可以使用,但是现在不能使用.如果使用上述代码,它将始终在浏览器中启动.因此,发生了许多误解.它可以与其他站点(推特,法定人数等)一起使用.
总结以上是内存溢出为你收集整理的如何在Android上已注册的应用程序中的WebView中启动Web链接?全部内容,希望文章能够帮你解决如何在Android上已注册的应用程序中的WebView中启动Web链接?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)