通过浏览器直接打开Android应用程序

需求

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

实现效果

假设手机上已经安装了App。则直接打开。假设没有安装,则開始下载。

实现方式

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

<data android:host="splash" android:scheme="huiyy" />

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

/*scheme:必须*/
//scheme_IOS: ‘huiyy://‘,
//scheme_Adr: ‘huiyy://splash‘,

var ifr = document.createElement(‘iframe‘);

ifr.src = ua.indexOf(‘os‘) > 0 ? config.scheme_IOS : config.scheme_Adr;

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

window.location = download_url;

HTML代码

<!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="call-app" href="javascript:;" class="label">下载客户端>></a>
            <input id="download-app" type="hidden" name="storeurl" value="http://www.baidu.com">
        </div>

        <script>
            (function(){
                var ua = navigator.userAgent.toLowerCase();
                var t;
                var config = {
                    /*scheme:必须*/
                    scheme_IOS: ‘huiyy://‘,
                    scheme_Adr: ‘huiyy://splash‘,
                    download_url: document.getElementById(‘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("call-app").addEventListener(‘click‘,openclient,false);

                }, false);
            })()
        </script>
    </body>
</html>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?

>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.downappdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.downappdemo.MainActivity"
            android:label="@string/app_name" >
            <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="huiyy" />
            </intent-filter>
        </activity>
    </application>

</manifest>
时间: 2024-10-08 08:02:03

通过浏览器直接打开Android应用程序的相关文章

更新:通过浏览器直接打开Android应用程序

之前写过一篇blog,介绍如何通过点击浏览器中的链接,直接打开本地Android App. 实现方式不太完美,最近看了微博.京东的手机版网页,感觉他们的实现方式很不错,研究了一下,实现以下效果: 如果本地已经安装了指定Android应用,就直接打开它:如果没有安装,则直接下载该应用的安装文件(也可以跳转到下载页面). 实现方式 1.为Android应用的启动Activity设置一个Schema,如下: <data android:host="splash" android:sch

通过浏览器直接打开Android App 应用程序

点击浏览器中的URL链接,启动特定的App. 首先做成HTML的页面,页面内容格式如下: <a href="[scheme]://[host]/[path]?[query]">启动应用程序</a> 这一句就可以了. 当然上面的 在标准形式,对于正常情况而言是OK的,但是每个浏览器有自己的特定义设置. 各个项目含义如下所示: scheme:判别启动的App. ※详细后述 host:适当记述 path:传值时必须的key     ※没有也可以 query:获取值的K

注册自定义协议,通过浏览器链接打开本地应用程序

参考:http://www.cnblogs.com/leslies2/p/3727762.html using System; using System.Security.AccessControl; using System.Windows; using Microsoft.Win32; namespace QPP.AutoUpdater { public static class Registry { /*将协议写入注册表,以便可以通过协议打开程序*/ /*参考http://www.cnbl

js 通过浏览器直接打开应用程序(IOS,Android)并判断浏览器内核

本功能主要用于手机端,如果手机未安装该APP,则跳转至下载页面:否则,直接打开手机中的APP. <div style="position:absolute; top:84%; left:24%; z-index:8;"> <a id="J-call-app" href="javascript:;"><img src="image/but01.jpg"></a> <input

浏览器网页判断手机是否安装IOS/Android客户端程序

IOS 原理如下: 为HTML页面中的超链接点击事件增加一个setTimeout方法. 如果在iPhone上面500ms内,本机有应用程序能解析这个协议并打开程序,则这个回调方法失效: 如果本机没有应用程序能解析该协议或者500ms内没有打开个程序,则执行setTimeout里面的function,就是跳转到apple的itunes. <html> <head> <meta name="viewport" content="width=devic

如何处理android程序变为后台程序,系统回收资源,再次打开时,程序因为null指针等崩溃

home键等原因,程序会变为后台程序,系统会更具需要,可能回收资源,再打开时候,就会因为资源回收,再调用oncreate,没有Intent参数而导致程序崩溃.   这种情况,我们可以处理的方式有两种,一是用: @Override     protected void onSaveInstanceState(Bundle outState) {      // TODO Auto-generated method stub      super.onSaveInstanceState(outSta

浏览器判断检测手机中是否安装了ios/android客户端程序

分类: iPhone 编程2013-08-26 10:38 1851人阅读 评论(2) 收藏 举报 最近在做一个项目,该项目的前身是为mobile browser量身打造的一个网站.现在有这样一个需求: 当用户在用mobile browser浏览该网站的时候会点击一个按钮/超链接,通过这个按钮的点击事情需要打开安装在本机的应用程序,或者如果本机没有安装该应用程序则打开应用商店并打开该程序在商店中的搜索结果页面. 刚开始的时候iPhone team的人给出一个solution,下面是实施跳转的HT

浏览器判断是否安装了ios/android客户端程序

分类: iPhone 编程2013-08-26 10:38 1851人阅读 评论(2) 收藏 举报 最近在做一个项目,该项目的前身是为mobile browser量身打造的一个网站.现在有这样一个需求: 当用户在用mobile browser浏览该网站的时候会点击一个按钮/超链接,通过这个按钮的点击事情需要打开安装在本机的应用程序,或者如果本机没有安装该应用程序则打开应用商店并打开该程序在商店中的搜索结果页面. 刚开始的时候iPhone team的人给出一个solution,下面是实施跳转的HT

Java开发桌面程序学习(八)——启动浏览器或者打开资源管理器操作与hyperlink超链接的使用

启动浏览器或者打开资源管理器 启动浏览器 java1.6版本以上,Desktop Desktop.getDesktop().browse(new URI("www.cnblogs.com/kexing")); 打开资源管理器 三种方式 //第一种常用,打开q:\\MyBlog这个文件夹目录 Desktop.getDesktop().open(new File("q:\\MyBlog")); Runtime.getRuntime().exec("explor