在实现这个功能的时候,被不同的浏览器折磨的胃疼,最后实现了勉强能用,也查考了一下其他人的博客
android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
android/iPhone:如何从browser直接打开应用程序或者打开应用商店(如果没有应用程序)
1、Html页面(JS不在行,这个是其他人写的)
需要留意的是Android_URL,格式需要符合[scheme]://[host]/[path]?[query]
scheme:判别启动的App。
host:适当记述
path:传值时必须的key (没有也可以)
query:获取值的Key和Value (没有也可以)
1
|
Android_URL = "myapp://www.test.com/openwith?uid=123"; |
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
|
< html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" /> < meta content = "telephone=no" name = "format-detection" /> < meta name = "viewport" content = "width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" /> < title >打开或下载应用</ title > < script src = "assets/plugins/jquery-1.8.3.min.js" type = "text/javascript" ></ script > </ head > < body > < a id = "vlink" onClick = "try_to_open_app()" style = "display:none" ></ a > < script > 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.*/)||!!u.match(/AppleWebKit/), //是否为移动终端 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 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器 iPad: u.indexOf('iPad') > -1, //是否iPad webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部 }; }() } var iOS_URL = "myapp://www.test.com_uid=123"; var Android_URL = "myapp://www.test.com/openwith?uid=123"; var mtUrl = "http://www.test.com/download"; function open_link() { window.location=mtUrl; } function try_to_open_app() { setTimeout('open_link()', 500); } //IOS if(browser.versions.iPhone){ document.getElementById("vlink").setAttribute("href",iOS_URL); document.getElementById("vlink").click(); } //Android else if(browser.versions.android){ document.getElementById("vlink").setAttribute("href",Android_URL); document.getElementById("vlink").click(); } else{ open_link(); } </ script > </ body > </ html > |
2、配置入口
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
|
<!-- 默认入口 --> < activity android:name = "net.laobanquan.im.splash.StartActivity" android:launchMode = "singleTop" android:screenOrientation = "portrait" android:theme = "@android:style/Theme.Black.NoTitleBar" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > <!-- 新建入口 --> < activity android:name = "net.test.WebStartActivity" android:screenOrientation = "portrait" > < intent-filter > < action android:name = "android.intent.action.VIEW" ></ action > < category android:name = "android.intent.category.DEFAULT" ></ category > < category android:name = "android.intent.category.BROWSABLE" ></ category > < data android:scheme = "myapp" android:host = "www.test.com" android:path = "/openwith" /> </ intent-filter > </ activity > |
3、Activity入口接受参数
1
2
3
4
5
6
7
8
9
|
String action = getIntent().getAction(); String uid = null ; if (Intent.ACTION_VIEW.equals(action)){ Uri uri = getIntent().getData(); if (uri != null ){ uid = uri.getQueryParameter( "uid" ); } } Log.d(TAG, uid); |
4、总结
如果原来点击图片的默认入口是StartActivity,那么最好新建WebStartActivity入口,除了多做“接受参数”其他和StartActivity一样