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


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

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

  • 相关阅读:
    C# 使用HtmlAgilityPack抓取网页信息
    企业微信开发之向员工付款(C#)
    企业微信开发之发放企业红包(C#)
    body-parser的使用
    NodeJs的express服务器报413 payload too large错误
    'nuxt' 不是内部或外部命令,也不是可运行的程序
    Linux node使用npm成功安装命令后,执行时却报找不到命令的问题
    npm查看全局安装了那些包的命令
    JS中==与===的区别
    JS事件流理解
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4481422.html
Copyright © 2020-2023  润新知