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

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

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

<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

你可能感兴趣的:(android,浏览器,启动,本地应用)