http://my.oschina.net/liucundong/blog/354029

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

目录[-]

  • 实现效果
  • 实现方式
  • HTML代码
  • AndroidMainfext.xml

之前写过一篇blog,介绍如何通过点击手机浏览器中的链接,直接打开本地Android App。

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

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

实现效果

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

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

实现方式

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

<dataandroid:host="splash"android:scheme="cundong"/>

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

varifr=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'sademo</ 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(){ varua=navigator.userAgent.toLowerCase(); vart; varconfig={ /*scheme:必须*/ scheme_IOS:'cundong://', scheme_Adr:'cundong://splash', download_url:document.getElementById('J-download-app').value, timeout:600 }; functionopenclient(){ varstartTime=Date.now(); varifr=document.createElement('iframe'); ifr.src=ua.indexOf('os')>0?config.scheme_IOS:config.scheme_Adr; ifr.style.display='none'; document.body.appendChild(ifr); vart=setTimeout(function(){ varendTime=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

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

更多相关文章

  1. Android 抽屉侧滑效果
  2. Android(手机)连接电脑本地服务器(flask)
  3. Android多种数据库存储方式对比
  4. 学习笔记-Android单项选择效果实现
  5. android 按钮点击效果 imageview button imagebutton均可
  6. Android之Application引用方式
  7. Android ImageView图片拖动效果
  8. Android:手机扫描局域网所有ip,并进行socket通讯

随机推荐

  1. android 一 android 的生命周期
  2. Android(安卓)异步加载解决方案
  3. Android(安卓)NDK编程浅入深出之--Androi
  4. Android(安卓)configChanges用法
  5. android 焦点问题
  6. Android(安卓)UI事件处理[isInTouchMode(
  7. Android青翼蝠王之ContentProvider
  8. android中使用sqlite、复制assets下的数
  9. Android快速入门
  10. Android中EditText 的setInputType以及se