html5启动原生应用的方法

  介绍

这篇文章主要介绍html5启动原生应用的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强>一、需要判断客户端的平台以及是否在微信浏览器中访问

<强> 1,客户端判断

在启动应用时,Android和IOS系统处理的方式是不一样的,Android这边由于开放,可以在浏览器中通过& lt; a>标签以及元标签的方式,让浏览器应用获取手机打开应用的权限进而启动应用。

而在IOS这边,IOS9以后的系统,则可以在应用程序开发过程中加入配置和逻辑代码编写,系统在浏览器即将访问到某个域名前就把这个域名对应的应用打开,这个有点闪,封闭还是有封闭的好处。

所以首先要在客户端判断,是Android系统还是IOS系统,判断代码如下

function  isInIos () {   ,,,var  userAgentInfo =, navigator.userAgent ,   ,,,,,,,Agents =, (“iPhone",,,“iPad",,“iPod"];   ,,,(var  v =, 0;, v  & lt;, Agents.length;, v + +), {   ,,,,,,,if  (userAgentInfo.indexOf(代理[v]),祝辞,0),{   ,,,,,,,,,return 真实;   ,,,,,,,}   ,,,}   ,,,return 假;   }

<强> 2,是否在微信内置浏览器中

无论是在哪个平台的客户端Android/IOS,在微信的平台上访问都有一个问题,那就是无法启动客户端,这是微信为了安全性考虑的限制,Android这边屏蔽模式协议,除非公司是微信的伙伴加入了白名单才能

使用,IOS系统可以去访问应用对应应用商店的下载页,但是微信经常屏蔽应用商店的这个网址,进而访问不到。比较方便的做法就是在微信浏览器中,无论是IOS还是Android都去应用宝的下载(IOS这边最后会到

应用商店中)页面打开。我这边的需求是提示用户点击”…“用默认浏览器打开。

判断是否是在微信中,代码如下:

function  isInWx () {   ,,,var  agent =, window.navigator.userAgent.toLowerCase ();   ,,,return  agent.match (/MicroMessenger/i),==, & # 39; micromessenger& # 39;;   }

<强>二,原理

首先无论是andorid还是IOS端,在浏览器中通过JS都是无法判断该手机是否装有某应用程序的,即使这个浏览器有权限读取手机应用列表,也没有一个固定的对外API让咱们进行查询。而H5启动应用本质上是通过

URL方案打开应用程序,一个应用程序可以设置一个或多个打开自己的URL方案,浏览器去访问某一个应用程序的URL方案,然后若系统安装有这个应用程序,则会请求权限去打开这个应用。其实也算是浏览器应用

打开另一个应用程序,操作系统就可以使UIApplication用的canOpenUrl方法来检测URL方案是否能打开对应的应用,而android也是类似的方式。当然如果JS跳转URL方案没有反应,也意味着这个手机没有

装这个应用。

<强>三,android平台

首先编辑AndroidManifest.xml,主要是增加第二个& lt; intent-filter>

& lt; activity  android: name=?activity.LoadingActivity"   ,,,,,android:标签=? {APP_NAME}“;   ,,,,,android: screenOrientation=皃ortrait"   ,,,,,android:主题=癅style/FirstActivityTheme"比;   ,,,,,& lt; intent-filter>   ,,,,,,,,,& lt; action  android: name=癮ndroid.intent.action.MAIN",/比;   & lt; category  android: name=癮ndroid.intent.category.LAUNCHER",/比;   ,,,,,& lt;/intent-filter>   ,,,,,& lt; intent-filter>   ,,,,,,,,,& lt; action  android: name=癮ndroid.intent.action.VIEW",/比;   & lt; category  android: name=癮ndroid.intent.category.DEFAULT",/比;   & lt; category  android: name=癮ndroid.intent.category.BROWSABLE",/比;   & lt; data  android:主机=癮ndroid"   ,,,,,,,,,,,,,,,android:方案=皐ushang",/比;   ,,,,,& lt;/intent-filter>   & lt;/activity>

比如此处wushang就是计划,这个最好是应用的唯一标识符,要不然在H5唤醒时,会出现一个选择框,选择启动哪一个应用程序。而主机表示启动该页面,其实这个更应该用com.android.sky这样的包名来替代更好。

这样的情况完整的URL就是wushang://android ? data=https://www.yisu.com/zixun/sky,后面是参数传递。在活动中可以用如下代码获取参数

public  void  onCreate (Bundle  savedInstanceState), {,,,,,,,,,,,,   ,,,,Uri  uridata =, this.getIntent () .getData (),,,,,,,,,,,,,,   ,,,,String  mydata =, uridata.getQueryParameter (“data");,,,,,,,,,,,,   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

html5启动原生应用的方法