博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过浏览器直接打开Android应用程序
阅读量:5903 次
发布时间:2019-06-19

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

 

通过手机浏览器直接打开Android应用程序。 如果本地已经安装了指定Android应用,就直接打开它; 如果没有安装,则直接下载该应用的安装文件(也可以跳转到下载页面)。

目录[-]

,介绍如何通过点击手机浏览器中的链接,直接打开本地Android App。

实现方式不太完美,最近看了微博、京东的手机版网页,感觉他们的实现方式很不错,研究了一下,实现以下效果:

如果本地已经安装了指定Android应用,就直接打开它;如果没有安装,则直接下载该应用的安装文件(也可以跳转到下载页面)。

实现效果

如下图所示,在手机浏览器中访问京东的手机版网站(m.jd.com),顶部会有一个广告图,点击这个广告图,如果手机上已经安装了京东App,则直接打开,如果没有安装,则开始下载。

实现方式

1.为Android应用的启动Activity设置一个Schema,如下:

 

2.用户点击浏览器中的链接时,在动态创建一个不可见的iframe,并且让这个iframe去加载步骤1中的Schema,如下:

var ifr = document.createElement('iframe');ifr.src="cundong://splash"

 

3,如果在指定的时间内没有跳转成功,则当前页跳转到apk的下载地址(或下载页),如下:

window.location = download_url;

 

HTML代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!
doctype 
html>
<
html
>
    
<
head
>
        
<
meta 
http-equiv
=
"Content-Type" 
content
=
"text/html; charset=utf-8"
>
 
        
<
meta 
name
=
"apple-mobile-web-app-capable" 
content
=
"yes"
>
        
<
meta 
name
=
"apple-mobile-web-app-status-bar-style" 
content
=
"black"
/>
 
        
<
title
>this's a demo</
title
>
        
<
meta 
id
=
"viewport" 
name
=
"viewport" 
content
=
"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,minimal-ui"
>
    
</
head
>
    
<
body
>
        
<
div
>
            
<
a 
id
=
"J-call-app" 
href
=
"javascript:;" 
class
=
"label"
>立即打开&gt;&gt;</
a
>
            
<
input 
id
=
"J-download-app" 
type
=
"hidden" 
name
=
"storeurl" 
value
=
"http://m.chanyouji.cn/apk/chanyouji-2.2.0.apk"
>
        
</
div
>
 
        
<
script
>
            
(function(){
                
var ua = navigator.userAgent.toLowerCase();
                
var t;
                
var config = {
                    
/*scheme:必须*/
                    
scheme_IOS: 'cundong://',
                    
scheme_Adr: 'cundong://splash',
                    
download_url: document.getElementById('J-download-app').value,
                    
timeout: 600
                
};
 
                
function openclient() {
                    
var startTime = Date.now();
 
                    
var ifr = document.createElement('iframe');
 
 
                    
ifr.src = ua.indexOf('os') > 0 ? config.scheme_IOS : config.scheme_Adr;
                    
ifr.style.display = 'none';
                    
document.body.appendChild(ifr);
 
                    
var t = setTimeout(function() {
                        
var endTime = Date.now();
 
                        
if (!startTime || endTime - startTime < config.timeout + 200) { 
                            //
window.location = config.download_url;
                        
} else {
                             
                        
}
                    
}, config.timeout);
 
                    
window.onblur = function() {
                        
clearTimeout(t);
                    
}
                
}
                
window.addEventListener("DOMContentLoaded", function(){
                    
document.getElementById("J-call-app").addEventListener('click',openclient,false);
 
                
}, false);
            
})()
        
</
script
>
    
</
body
>
</
html
>

 

AndroidMainfext.xml

        
           
           
        
        
            
            
            
            
       

本文转自wanqi博客园博客,原文链接:http://www.cnblogs.com/wanqieddy/p/4661550.html,如需转载请自行联系原作者

你可能感兴趣的文章
Hadoop学习笔记系列文章导航
查看>>
SpringMVC中ModelAndView addObject()设置的值jsp取不到的问题
查看>>
Prometheus : 入门
查看>>
使用 PowerShell 创建和修改 ExpressRoute 线路
查看>>
在C#中获取如PHP函数time()一样的时间戳
查看>>
Redis List数据类型
查看>>
大数据项目实践(四)——之Hive配置
查看>>
初学vue2.0-组件-文档理解笔记v1.0
查看>>
Centos7安装Gitlab10.0
查看>>
上传图片预览
查看>>
lagp,lacp详解
查看>>
LVS之DR模式原理与实践
查看>>
Docker的系统资源限制及验证
查看>>
c++ ios_base register_callback方法使用
查看>>
Java中为什么需要Object类,Object类为什么是所有类的父类
查看>>
angularjs-paste-upload
查看>>
linux基础命令 head
查看>>
objective c:import和include的区别, ""和<>区别
查看>>
The Shared folder with you
查看>>
poj 2234 Matches Game
查看>>