android/ios js 启动apk
1.在移动设备访问某个连接时时,如果本地安装了其应用客户端,则浏览器会调用本地客户端,没有安装则会跳转到下载页面,提示安装。刚好有这样的需求,网上参考了其他人的实现,大部分都是关于APK和本地js交互,相关资料可以参考如下,要注意的是手机qq浏览器不支持iframe,那么可以推测不支持iframe的浏览器都不行的。
web端代码如下
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>APK下载</title>
<script type="text/javascript" src="${ctx}/static/script/base/jquery-1.11.1.min.js"></script>
<script type="text/javascript">
var browser = {
versions: function () {
var u = navigator.userAgent, app = navigator.appVersion;
return { //移动终端浏览器版本信息
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
};
}(),
language: (navigator.browserLanguage || navigator.language).toLowerCase()
}
$(function(){
open();
});
function open(){
if (browser.versions.mobile) {//判断是否是移动设备打开。browser代码在下面
var ua = navigator.userAgent.toLowerCase();//获取判断用的对象
if (ua.match(/QQ/i) == "qq") {
window.location="http://edu.adc.ah.chinamobile.com/cms3/ahappdown/index.html";
return;
}
}else {//否则就是PC浏览器打开
}
//判断是否是android设备浏览器 if (navigator.userAgent.match(/android/i)) {
if (navigator.userAgent.match(/android/i)) {
document.getElementById('openApp').onclick = function(e) {
// 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为
// 否则打开a标签的href链接
var ifrSrc = 'educloud://anhuiwx.app/hejiaoyuapp';
if (!ifrSrc) {
return;
}
$("#bodyId").append("<iframe id='ifr' style='display:none;'></iframe>");
$("#ifr").attr("src",ifrSrc);
setTimeout(function() {
$("#ifr").remove();
}, 1000);
};
if (document.all) {
document.getElementById('openApp').click();
}
// 其它浏览器
else {
var e = document.createEvent("MouseEvents");
e.initEvent("click", true, true);
document.getElementById("openApp").dispatchEvent(e);
}
}
else if(navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)){ //ios判断
document.getElementById('openApp').onclick = function(e) {
// 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为
// 否则打开a标签的href链接
var ifrSrc = 'andedu://andedu';
if (!ifrSrc) {
return;
}
$("#bodyId").append("<iframe id='ifr' style='display:none;'></iframe>");
$("#ifr").attr("src",ifrSrc);
setTimeout(function() {
$("#ifr").remove();
}, 1000);
};
if (document.all) {
document.getElementById('openApp').click();
}
// 其它浏览器
else {
var e = document.createEvent("MouseEvents");
e.initEvent("click", true, true);
document.getElementById("openApp").dispatchEvent(e);
}
}
}
</script>
<body id="bodyId">
<a href="http://edu.adc.ah.chinamobile.com/cms3/ahappdown/index.html" id="openApp" style="display: none">APK客户端下载链接</a>
</body>
andriod端配置如下
在android应用中application的详细配置实例:
在MainActivity增加了
"android.intent.action.VIEW"/>
"android.intent.category.DEFAULT"/>
"android.intent.category.BROWSABLE"/>
"testjs"/>
过滤器。
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
android:name="demo.testjs.MainActivity"
android:label="@string/app_name">
"android.intent.action.MAIN"/>
"android.intent.category.LAUNCHER"/>
"android.intent.action.VIEW"/>
"android.intent.category.DEFAULT"/>
"android.intent.category.BROWSABLE"/>
"testjs"/>
在activity中可以取到通过浏览器传递的值
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(Intent.ACTION_VIEW.equals(getIntent().getAction())){
Intentintent = getIntent();
Stringscheme = intent.getScheme();
Uriuri = intent.getData();
Log.e(tag,"scheme: "+scheme);
Log.e(tag,"path: "+uri.getPath());
Log.e(tag,"Host: "+uri.getHost());
Log.e(tag,"name: "+uri.getQueryParameter("name"));
Log.e(tag,"age: "+uri.getQueryParameter("age"));
}
}
android/ios js 启动apk的更多相关文章
- React Native & Android & iOS & APK
React Native & Android & iOS & APK https://play.google.com/apps/publish/signup/ $ 25 bui ...
- Android & iOS 启动画面工具
感谢Aone!为我们开发了如此便捷的工具!! 以下为原文: Android & iOS 启动画面工具 下载:OneSplash.启动画面工具.Aone.20190318.zip 说明:这一个 ...
- React++ node.js ++SQL Sever ++MySQL++ python ++ php ++ java ++ c++ c#++ java ++ android ++ ios ++Linux+
"C语言在它诞生的那个年代,是非常不错的语言,可惜没有OOP.当项目臃肿到一定程度,人类就不可控了. 为了弥补这个缺陷,C++诞生了.而为了应对各种情况,C++设计的大而全,太多复杂的特性, ...
- android 通过命令行启动Apk
几个启动指定程序activity的例子 Music 和 Video(音乐和视频)的启动方法为: # am start -n com.android.music/com.android.music.Mu ...
- 用HTML5/CSS3/JS开发Android/IOS应用框架大全
现在人人都想成为安卓/IOS应用开发工程师.其实,安卓/IOS应用可以用很多种语言来实现.由于我们前端开发工程师,对HTML5/CSS/JavaScript的网络编程已经相当熟悉了.所以,今天大家将会 ...
- Android动态方式破解apk终极篇(加固apk破解方式)
一.前言 今天总算迎来了破解系列的最后一篇文章了,之前的两篇文章分别为: 第一篇:如何使用Eclipse动态调试smali源码 第二篇:如何使用IDA动态调试SO文件 现在要说的就是最后一篇了,如何应 ...
- Tomcat双向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端超安全通信
紧接着<Tomcat单向Https验证搭建,亲自实现与主流浏览器.Android/iOS移动客户端安全通信>,此处演示下更安全的双向Https认证的通信机制,为了清晰明了,以下进行单独描述 ...
- Tomcat单向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端安全通信
众所周知,iOS9已经开始在联网方面默认强制使用Https替换原来的Http请求了,虽然Http和Https各有各的优势,但是总得来说,到了现在这个安全的信息时代,开发者已经离不开Https了. 网上 ...
- Android IOS WebRTC 音视频开发总结(二三)-- hurtc使用说明
本文主要介绍如何测试基于浏览器和手机的视频通话程序,转载请说明出处,文章来自博客园RTC.Blacker,更多详见www.blackerteam.com 很多人想测试浏览器(包括浏览器版本和桌面e ...
随机推荐
- nginx的初步了解
今天学习了nginx.nginx不但可以作为服务器,类似于IIS,也可以作为反向代理.它有一个配置文件nginx.conf,在这个文件里配置了一些重要的参数,通过修改这些参数,然后启动nginx,就可 ...
- Python:XXX missing X required positional argument: 'self'
代码的一个小小Bug有时候会让人焦头烂额,费了很大劲搞明白的问题,如果不记录下来,是很容易遗忘的! 定义一个类,如果按照以下的方式使用,则会出现TypeError: testFunc() missin ...
- android 各种xml资源的引用方式
更多资源类型 本页定义了其它一些具体的资源类型,包括: Bool 存放布尔值的XML资源. Color 存放颜色值的XML资源(十六进制颜色). Dimension 存放数量值的XML资源(带计量单位 ...
- js对象的继承以及公有私有属性的定义和读写
最近想写一些js工具,有些方面需要用到面向对象的方法,比如继承父类属性和方法.通过私有化隐藏某些对象的属性等,因为没有系统的学习js,所以不知道怎么做,觉得很伤脑筋. 今天受到技术群里朋友的提示,并查 ...
- S_ISREG等几个常见的宏(转)
来自百度文库:http://wenku.baidu.com/view/31777dc1d5bbfd0a795673b1.html stat函数讲解: 表头文件: #include <sys/st ...
- Hibernate 注解的用法以及说明
1.类级别注解 @Entity 映射实体类 @Table 映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体be ...
- maven仓库使用
maven镜像仓库 1.国内maven镜像仓库 阿里云镜像 <mirrors> <mirror> <id>aliyun</id> <name> ...
- JavaWeb技术(一):JDBC简介
一. JDBC简介 1. Java Database Connectivity(JDBC) 使用JDBC可以对数据库进行访问 2. JDBC的核心接口 1)DriverManager 驱动管理器接口 ...
- unity3d的Texture2D与opencv的Mat之间的相互转换
这里的opencv使用的是opencvsharp,它是c#语言对c++的opencv的一层封装,使得c#开发者可以更方便的使用opencv,而不必纠结于跨语言调用的问题. 因此,这里使用的opencv ...
- 金蝶 K/3 Cloud 服务端控件编程模型
如下图是服务端已有的控件编程模型