当前位置: 代码迷 >> Android >> 转载:透过浏览器直接打开Android应用程序
  详细解决方案

转载:透过浏览器直接打开Android应用程序

热度:106   发布时间:2016-04-27 23:36:30.0
转载:通过浏览器直接打开Android应用程序

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

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

实现效果

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

实现方式

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

<data?android:host="splash"?android:scheme="cundong"/>

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

?

<activity?????android:name=".activity.LauncherActivity"?????android:configChanges="orientation|keyboardHidden|navigation|screenSize"?????android:label="@string/app_name"?????android:screenOrientation="portrait"?>????????<intent-filter>???????????<action?android:name="android.intent.action.MAIN"?/>???????????<category?android:name="android.intent.category.LAUNCHER"?/>????????</intent-filter>????????<intent-filter>????????????<action?android:name="android.intent.action.VIEW"?/>????????????<category?android:name="android.intent.category.DEFAULT"?/>????????????<category?android:name="android.intent.category.BROWSABLE"?/>????????????<data?android:host="splash"?android:scheme="cundong"?/>???????</intent-filter></activity>

原文地址:http://my.oschina.net/liucundong/blog/354029

  相关解决方案