android 如何启动apk,Android JS启动APK
Android JS启动APK
1.在移动设备访问m.alipay.com时,如果本地安装了支付宝客户端,则浏览器会调用本地客户端,没有安装则会跳转到下载页面,提示安装。刚好有这样的需求,就分析了下支付宝的实现。网上参考了其他人的实现,大部分都是关于APK和本地js交互,相关资料可以参考
2. APK启动流程
在启动APK时,系统会发出对应的intent,根据包名加intent来启动对应activity,activity如果存在对应的intent-filter则启动该应用,如果多个应用同时匹配,则会出现选择框让用户选择。
如下,启动demo.testjs应用的MainActivity
ActivityManager(313):START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0×10200000 cmp=demo.testjs/.MainActivity bnds=[13,76][127,211]} from pid 607
3.浏览器和本地APK的交互
Android manifest标签参考官方的开发指南
下面是UC的一个
设置
标签,可以拦截浏览器的请求,data可以增加过滤的条件。为了防止我们的启动APK scheme被其它应用拦截,尽量使用唯一的标识符如域名等。
在android应用中application的详细配置实例:
在MainActivity增加了
过滤器。
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” >
在web页面中加入如下测试代码
测试页面
APK客户端下载链接
//ios判断 if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i))
//判断是否是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 = ‘testjs://platformapi/startApp?name=tom&age=18′;
if (!ifrSrc) {
return;
}
var ifr = document.createElement(‘iframe’);
ifr.src = ifrSrc;
ifr.style.display = ‘none’;
document.body.appendChild(ifr);
setTimeout(function() {
document.body.removeChild(ifr);
}, 1000);
};
if (document.all) {
document.getElementById(‘openApp’).click();
}
// 其它浏览器
else {
var e = document.createEvent(“MouseEvents”);
e.initEvent(“click”, true, true);
document.getElementById(“openApp”).dispatchEvent(e);
}
}
新建web工程,加入测试页面。在手机浏览器上访问该页面,如果本地安装了对应的APK,则会启动APK,没有安装则跳转到对应的下载页面。以上web页面的脚本从支付宝手机客户端访问的页面截取的。(UC7.8版本的android浏览器可以下载保存网页)
4.获取浏览器传递的值
var ifrSrc = ‘testjs://platformapi/startApp?name=tom&age=18′;
实例中会提交name和age值
在activity中可以取到通过浏览器传递的值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(Intent.ACTION_VIEW.equals(getIntent().getAction())){
Intent intent = getIntent();
String scheme = intent.getScheme();
Uri uri = 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”));
}
}
可以取到scheme、 url、参数列表等信息
PS:浏览器实际上没有办法判断到本地是否安装了对应的APK文件,支付宝的web前端实现实际上了打开了一个隐藏的url地址,该url如果被本地apk拦截,则启动本地apk,如果url没有被拦截,则在1S后删除添加的’iframe’,跳转到下载页面。(不管url是否被本地拦截成功,1S后都会跳转下载页面,只不过拦截成功,本地APK启动页面会遮住浏览器的下载页面)
参考其它人用window.location 或 window.open标签也可以启动本地APK,但没有处理url跳转不存在的问题。(window.open未测试成功)
window.location实现方式:
AndroidManifest.xml配置
web页面添加
alert(“启动APK”);
window.location=”testjs://demo.testjs”;
android 如何启动apk,Android JS启动APK相关推荐
- 【Android 插件化】VirtualApp 接入 ( 安装 APK 插件应用 | 启动插件 APK 应用 | MainActivity 安装启动插件完整代码 )
文章目录 一.安装 APK 插件应用 二.启动插件 APK 应用 三.MainActivity 完整代码 四.博客源码 一.安装 APK 插件应用 调用 VirtualCore.get().insta ...
- Android 浏览器的研究(四)--- Apk的启动和主页的加载过程
当我们在Launcher中点击浏览器的图标时,浏览器的窗口会打开并显示主页(HomePage).这里我们对这一场景进行分析,研究浏览器如何启动,取得缺省主页并将它布局和显示的. 根据前边对WebVie ...
- Android开发——Android系统启动以及APK安装、启动过程
0. 前言 从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 1. 系统上电 当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被 ...
- Android 4.0.4系统下实现apk的静默安装和启动
转自http://www.linuxidc.com/Linux/2013-02/79403.htm 未亲测 最近在Android 4.0.4系统下实现apk的静默安装和启动的功能,这里和大家分享一下, ...
- Unity发布Android APK去掉Unity启动Logo教程
Unity发布Android APK去掉Unity启动Logo教程 我们要解决的问题: 黑屏时间问题和启动Logo问题,之所以黑屏是因为Activity启动后mUnityPlayer 中的内容还没有准 ...
- android基础 [超级详细android Activity组件解析(Activity综述,Activity生命周期,Activity启动--携带参数启动)]
1 章节目录 2 Android Activity综述 2.1 Activity怎么用 2.2 layout - 界面布局 2.3 Java - 控制界面 2.4 AndroidManifest.xm ...
- Android 10.0 PackageManagerService(三)APK扫描-[Android取经之路]
摘要:上一节讲解了PKMS的 权限扫描,扫描/system/etc/permissions中的xml,存入相应的结构体中,供之后权限管理使用. 这一节主要来讲讲APK的扫描. 阅读本文大约需要花费15 ...
- Android 10.0 PackageManagerService(一)工作原理及启动流程-[Android取经之路]
摘要:PackageManagerService是Android系统核心服务之一,在Android中的非常重要,主要负责APK.jar包等的管理. 阅读本文大约需要花费50分钟. 文章的内容主要还是从 ...
- Android10.0系统启动之Launcher(桌面)启动流程-[Android取经之路]
摘要:上一节我们讲完了Android10.0的ActivityManagerService的启动流程,在AMS的最后启动了Launcher进程,今天我们就来看看Launcher的真正启动流程. 阅读本 ...
- Android 10.0 系统服务之ActivityMnagerService-AMS启动流程-[Android取经之路]
摘要:上一节我们讲完了SystemServer的启动过程,这一节接着上一节的步骤,来讲解ActivityManagerService的启动过程. ActivityManagerService简称AMS ...
最新文章
- 迎接奥运会 里约把机场的IT建设翻新了下
- JavaScript中的剪贴板(clipboardData)
- 优化算法-共轭梯度法
- 研究生的早期科研之路
- JAVA关于父亲节的代码_关于父亲节的经典语录
- 虚幻引擎发布4.8版,支持VR虚拟设备
- 模式(一)javascript设计模式
- arcgis中的python字符串比较
- Linux——tar打包文件和压缩解压缩
- CSS3新单位vw,vh,vmin,vmax详解
- 数据结构之基于Java的最优二叉树实现
- 图片上传插件WebUploader的坑
- windows安装python3_windows下同时安装python2和python3
- iOS-UI分析利器--Reveal安装破解以及简单使用
- shell脚本格式的几点注意:格式严格,空格不能随便出现(一写就记不住)
- 企业AD域管理利弊_如何避免企业AD域管理中的各种弊端?
- 如何制作互联网区块链PPT模板?
- 今年11月初阿里巴巴社招面试经历分享,Java工程师方向已拿offer【附学习方法】
- dell服务器设置bios设置u盘启动不了系统,戴尔台式机bios设置图解教程|dell bios设置u盘启动...
- mocc javascript
热门文章
- “蔚小理”想挑战特斯拉?先干过比亚迪再说
- python代码表达失恋_罗建军失恋
- 计算机系统动态库修复,电脑系统windows7出现无法定位动态链接库user32.dll错误提示解决措施...
- Navicat备份数据库和还原数据库详解
- 电脑数据丢失没有备份怎么找回?
- GAMES101-现代计算机图形学入门-闫令琪——Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering) 学习笔记
- 当自己觉得特别迷茫的时候,是怎么走出这个困境的
- 对音频压缩概念的一些误解--记一次与音视频压缩专家的对话
- 红外遥控接收发射原理及ESP8266实现
- 新唐单片机选型手册_Nuvoton新唐8位8051单片机选型指南