Android开发——通过扫描二维码,打开或者下载Android应用

原文地址:http://my.oschina.net/jseven1989/blog/197533

0


摘要  业务需求:(类QQ好友二维码)通过扫描二维码:如果还没下载则跳转到下载页面,如果已存在则打开应用

0、呵呵

在实现这个功能的时候,被不同的浏览器折磨的胃疼,最后实现了勉强能用,也查考了一下其他人的博客

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一样

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值