文档章节

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

康子齐
 康子齐
发布于 2015/05/15 14:50
字数 753
阅读 712
收藏 93

模仿大众点评,通过微信扫一扫直接打开本地安装的大众点评,如果没安装就跳转到下载界面

下边是大众点评的跳转页面:

<html>
<head>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<script>
var hipCityId = 0;
if(hipCityId > 0){
	var _hip = [
	['_setPageId', 2010003],
	['_setCityId', 0]
	];
}
</script>
</head>
<body>
<script type="text/javascript" src="http://m1.s2.dpfile.com/hls/hippo2.min.376e5aee201f773050a4842e4fd097c4.js"></script>

<script>
var isAndroid = false;
var iPhone = false;
var iPad = false;
var userAgent = navigator.userAgent;
var downloadUrl = "";
if (userAgent.match("Android") || userAgent.match("android")){
	isAndroid = true;
	downloadUrl = '';
}else if (userAgent.match("iPhone")){
	iPhone = true;
	downloadUrl = 'http://itunes.apple.com/cn/app/id351091731?utm_source=__epa';
}else if (userAgent.match("iPad")){
	iPad = true;
	downloadUrl = '';
}
	var redirect_url = "";
	if(isAndroid || iPhone || iPad){
		var startTime = Date.now();
		div = document.createElement('div');
		div.style.visibility = 'hidden';
		div.innerHTML = '<iframe id="schema" src="' + 'dianping://home?utm_=w_tuanpc_home' + '" scrolling="no" width="1" height="1"></iframe>';
		document.body.appendChild(div);
		
		var delta = Date.now() - startTime;
		if(delta < 200){
			startTime = Date.now();
			document.getElementById("schema").src="";
			delta = Date.now() - startTime;
			if(delta < 200){
				if(downloadUrl!==null && downloadUrl!==''){
					redirect_url = downloadUrl;
					_hip.push(['mv', {module:'synthesislink_3224',action:'click'}]);
				}else{
				}
			}
		}
	}else{
			redirect_url = downloadUrl;
	}

	if(redirect_url){
		setTimeout(function(){
			window.location = redirect_url;
		}, 500);
	}
</script>
<div class="title">大众点评客户端</div>
    <div class="photo">
    <img src="http://m1.s1.dpfile.com/sc/download/background.png">
    </div>
    <div class="link">
    <a class="download-banner" onclick="downloadFunc()" href="javascript:void(0)">下载客户端</a>
    <a class="go-on" onclick="window.history.go(-1)" href="javascript:void(0)" >继续访问</a>
</div>
<style>
    body {
        background-color: #eeeeee;
        margin: 0;
        text-align: center;
    }
    img {
        width: 130px;
        height: 223px;
    }
    .title {
        color: #333333;
        margin-top: 30px;
        margin-bottom: 30px;
        font-size: 24px;
        line-height: 24px;
        text-align: center;
    }
    .photo {
        text-align: center;
    }
    .link {
        font-size: 16px;
        margin-top: 20px;
    }
    .download-banner,.go-on {
        width: 120px;
        border-radius: 4px;
        height: 40px;
        display: inline-block;
        line-height: 40px;
        text-decoration: none;
    }
    .download-banner {
        background-color: #ff6633;
        color: white;
    }
    .go-on {
        background-color: #ffffff;
        margin-left: 8px;
        color: #666666;
        text-decoration: none;
    }
</style>
<script>
	function downloadFunc(){
		var dlLink = "http://m.api.dianping.com/downloadlink?redirect=3259";
		var ua = navigator.userAgent;
		if(ua.indexOf("Android") > 0){
			var androidLink = 'http://i2.dpfile.com/download/dianping-qr_6.9.6.apk?utm_source=__epa';
			if(androidLink!=null && androidLink!="" && androidLink.indexOf(".apk")>0){
				dlLink = androidLink;
			}
		}
		window.location = dlLink;
	}
</script>

</body>
</html>

下面是大众点评android版本破解的配置文件关键部分:

   <data android:host="forward" android:scheme="dianping"/>

       <activity android:label="@string/app_name" android:name="com.dianping.loader.ForwardActivity" android:screenOrientation="nosensor" android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <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="forward" android:scheme="dianping"/>
            </intent-filter>
        </activity>
        <activity-alias android:exported="true" android:label="@string/app_name" android:name="com.dianping.v1.ForwardActivity" android:targetActivity="com.dianping.loader.ForwardActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity-alias>
        
        <activity android:configChanges="keyboardHidden|orientation" android:label="@string/app_name" android:name="com.dianping.main.guide.SplashScreenActivity" android:screenOrientation="nosensor" android:theme="@style/Theme.DianpingNoTitle.SplashBackground">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.LAUNCHER"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>

综上,其实通过网页启动Activity是通过Activity所配置的隐式Intent方式(配置在AndroidManifest中)

精简以上代码后,如下:

1.Manifest文件中给TestActivity配置一个隐式Intent

<activity android:name=".activity.TestActivity">
  <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="test"
      android:scheme="testapp" />
  </intent-filter>
</activity>

2.在网页中点击链接<a href="testapp://test">Start TestActivity</a>就会启动TestActivity

注:category是类别匹对,data是数据匹对,data属性是一个URI, URI中包含scheme, host, post和path, 典型的URI为:scheme://host:port/path,现在明白链接中为什么要<a href="testapp://test">这样写了吧

3.如果传递参数

Html中:<a href="testapp://test?id=100101&title=HelloAndroid">StartTestActivity</a>

Uri uri = getIntent().getData();
Strinng id = uri.getQueryParameter("id");
Strinng title = uri.getQueryParameter("title");

这样就可以实现参数的传递了

参考资料:http://my.oschina.net/liucundong/blog/354029?p=5#comments

© 著作权归作者所有

康子齐
粉丝 0
博文 3
码字总数 1161
作品 0
昌平
私信 提问
加载中

评论(2)

四五六七八
我用webview加载一个url。怎么点击一个按钮就打开应用里的其他activity,不要js交互。就用这种类似的方式
一点灵犀
一点灵犀
原来如此,schema可以自定义79
Android上面通过URL来启动本地应用

场景:通过浏览器打开URL或者扫描软件扫描URL来启动本地应用 Activity配置: [html] view plaincopy <application android:allowBackup="true" android:icon="@drawable/ic_launcher" andro......

simpower
2014/10/04
0
0
Android开发——通过扫描二维码,打开或者下载Android应用

0、呵呵 在实现这个功能的时候,被不同的浏览器折磨的胃疼,最后实现了勉强能用,也查考了一下其他人的博客 android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据 andr...

Jseven1989
2014/02/07
0
1
更新:通过浏览器直接打开Android应用程序

之前写过一篇blog,介绍如何通过点击手机浏览器中的链接,直接打开本地Android App。 实现方式不太完美,最近看了微博、京东的手机版网页,感觉他们的实现方式很不错,研究了一下,实现以下效...

Cundong
2014/12/09
0
64
Android Activity中的四种启动模式

Android总Activity的启动模式分为四种: <activity android:name=".MainActivity" android:launchMode="standard" /> 【standard】 默认模式启动模式,每次激活Activity时都会创建Activity,......

恰同学少年
2015/07/27
0
0
Android Activity 和 Task 设计指导

Activity and Task Design 译者署名:深夜未眠 译者链接:http://chris1012f.javaeye.com/ 版本:Android 3.1 r1 原文 http://developer.android.com/guide/practices/ui_guidelines/activit......

阿酷
2011/11/17
5.7K
2

没有更多内容

加载失败,请刷新页面

加载更多

系列一、入门教程web端实现地图功能

废话不多说,社会我多多 实现步骤如下 第一步、在高德api注册账户 搜索高德api点击进入官网,自己注册一个账号,你懂得怎么注册撒 点击进入下图画框位置,来到官网api入门教程 第二步、按照以...

我叫小糖主
25分钟前
9
0
springboot统一校验validator实现

第一步: pom.xml需引入spring-boot-start-web依赖,其中包含validator框架包 <!--Spring Boot Web依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifact......

zzx10
26分钟前
2
0
vue组件系列-预览、放大、缩小、旋转

这个用的是别人的,如果有问题,估计改起来会很纠结。 安装 npm install v-viewer --save 卸载 npm uninstall v-viewer 注册 在main.js中 // The Vue build version to load with the `impor...

轻轻的走过
28分钟前
2
0
Taro Input输入内容无法绑定state问题

在onInput事件中,返回内容,返回内容即是输入框内容 例如只能输入一个小数点: <Input type='digit' placeholder='带小数点的数字键盘' value={this.state.advance} onInput={ e => this.ch......

步步登高
29分钟前
0
0
Windows10远程连接CentOS7(搭建Xrdp服务器)

Windows10远程连接CentOS7(搭建Xrdp服务器) 听语音 浏览:0 | 更新:2018-02-11 12:56 1 2 3 4 5 6 7 分步阅读 通过VNC或Xdmcp的方式远程连接linux图形桌面,虽然都很方便,但有个缺点就是...

linjin200
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部