博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebView启动Activity以及url路由
阅读量:6853 次
发布时间:2019-06-26

本文共 1850 字,大约阅读时间需要 6 分钟。

  hot3.png

1、webview跳启动activity 限制:webview如果设置了WebViewClient,无论自定义协议还是http(s)协议,点击链接无法启动activity, 必须在shouldOverrideUrlLoading方法中根据url过滤,手动启动activity。所以App内部跳转使用手动拦

截器实现。 需实现效果:有对应的activity实现,就启动activity,没有的话就正常访问点击的链接。

2、系统浏览器跳启动activity 限制:只能是自定义协议才能启动,http(s)无法启动。所以AndroidManifest.xml中Activity排除使用http(s) 协议。 需实现效果:能启动Activity就启动,不能启动的话就正常访问点击的链接。

3、第三方app webview跳启动activity 限制:不能启动activity,不能下载,只能浏览。 需实现效果:url能跳转可访问地址则正常访问,如果是404,就重定向到下载界面,下载界面会根据是否是 微信来显示友好提示(在系统浏览器打开)还是下载。或者直接提示在浏览器中打开。

最终目的是闭环到app上,没有app的情况url能跳转则跳转,404则重定向到下载界面。

策略:

1、正常的url增加参数标识,字段越来短越好。如cmd=xxx; 拦截器中根据这个来跳转。

2、用自定义协议配置一个跳转RouterActivity,也可以在HomeActivity中处理,在该Activity中用拦截器跳 转。不过最好是在RouterActivity中,这样可以向JumpActivity中那样判断是否app已经被杀掉。

public class RouterActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Uri uri = getIntent().getData(); if (uri != null) { UrlInterceptorManager.getInstance().interceptBBS(this, uri.toString()); } finish(); }}

3、html界面加载完成后每次都尝试启动activity;点击htlm链接,该链接要有cmd参数,如果是在app内部,webview的shouldOverrideUrlLoading方法中拦截器跳转;如果是系统浏览器,正常跳转,但是到新界面会尝试打开Activity,注意自定义协议的链接也要有cmd。

if(navigator.userAgent.match(/android/i))   {    var ifrSrc ='router://xxx.xxx.com/appstore/startnewpage?cmd=chatactivity';    var ifr = document.createElement('iframe');    ifr.src = ifrSrc;    ifr.style.display = 'none';    document.body.appendChild(ifr);    setTimeout(function() {        document.body.removeChild(ifr);    }, 1500);   }

4、微信中提示浏览器打开。

5、为了和app内部activity之间跳转统一,可以参考开源项目。只不过注解只需一个value值,就是cmd的值。拦截器中就可以直接使用Routers.open(),不用 if else判断。

6、路由统一规划设想流程图 输入图片说明

转载于:https://my.oschina.net/bruces/blog/756344

你可能感兴趣的文章
Cisco ASA5500解决内网用公网IP不能访问DMZ区服务器的
查看>>
Windows7常用命令
查看>>
LaTex 制作简历
查看>>
windows8系统装机总结
查看>>
我的友情链接
查看>>
crack-jar游戏之拉阔
查看>>
Java中的深拷贝和浅拷贝
查看>>
<JQuery>页面加载函数的三种写法
查看>>
大数据系列12:Hadoop2 – 全新的Hadoop
查看>>
Result相关
查看>>
关于scrolltop 兼容 IE6/7/8, Safari,FF的方法
查看>>
PRIu64宏—打印输出64位整型值
查看>>
command设计模式
查看>>
postgresql数据类型之时间类型
查看>>
virtualmin proftpd cuteftp下如何显示.开头隐藏文件
查看>>
第16章 C预处理器和C库 16.5 文件包含: #include
查看>>
关于Goertzel
查看>>
No module named mysqldb
查看>>
vue获取input输入框的数据
查看>>
Go标准库testing进行有序代码测试
查看>>