Android通过浏览器打开app页面并且传递值
最近公司有个需求,要求从第三方网页端打开一个网页,然后在网页中点击“下载”,“打开”按钮,在app端进行下载和打开操作。这里记录下方法。
首先,网页和app页面进行交互,其实会很快想到JS交互,但是现在需要在第三方浏览器中,那就没法拿到Webview,也就没法js互交,所以这里android也提供有方法。
看一个静态页面(html):
<BODY> <a href="hjz://com.zjmk.hjz_progressmotirx/openwith?gameid=12007&pk_name=com.surfing.android.tastyfood">启动应用程序</a> </p></br></p> <a href="hjz://com.zjmk.hjz_progressmotirx/down?apkurl=http://down.hjz518.com/upload/APK/2015-5/19/150519172102.apk&apkname=黄金指&memo=这是一款牛逼的手赚软件&gameid=12007&pk_name=com.surfing.android.tastyfood">启动应用程序下载页面</a> </BODY>
我们看看href里面的组成:
- hjz://:这里的hjz://是“scheme”。
- com.zjmk.hjz_progressmotirx:这个是“host”。
- /down:这个是方法名前缀“pathPrefix”。
- apkurl=….&pkname=…:这个是传递的参数。
看到以上代码可能还是不是很明白这些有什么用,那么接着往下看….
看android端:
其实在android里面的项目清单住处的Activity下面可以添加很多数据节点,如 ,,,….
<activity android:name=".OpenapkActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar"> <intent-filter> <action android: name="android.intent.action.VIEW"/> <category android: name="android.intent.category.DEFAULT" /> <category name="android.intent.category.BROWSABLE" /> <data android:scheme="hjz" android:host="com.zjmk.hjz_progressmotirx" android:pathPrefix="/openwith"/> </intent-filter> </activity>
看这个activity注册,在其下面添加了几个数据节点,action,category,data。看来data里面的数据应该就很明白了,data节点里面的数据都是和我们网页相对应的,如
scheme=”hjz”,//协议
host=”com.zjmk.hjz_progressmotirx”;//主机
pathPrefix=”/openwith”;//方法前缀
只有先对应才能正确的启动页面。
在activity中获取数据:
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.openapklayput); Intent intent=getIntent(); String action = intent.getAction(); if(Intent.ACTION_VIEW.equals(action)){ Uri uri =intent.getData(); if(uri != null){ //根据属性值获取数据 String gameid= uri.getQueryParameter("gameid"); String pkname= uri.getQueryParameter("pk_name"); PackageManager packageManager = getPackageManager(); Intent intent2=new Intent(); intent2 =packageManager .getLaunchIntentForPackage(pkname); startActivity(intent2); Intent intent1= new Intent(this,MotirxServices.class); } } }
……到这里可以完成第三方浏览器和自己app应用的交互在跳过WebVIew的情况下,但是这里可能会有一个悲催的事情,就是他的兼容性。在369获取猎豹浏览器中href=“”;这里在scheme前面自动加上http://…..
这里就导致不能正常的打开我们指定的app页面。系统内置浏览器肯定是可以的,只是第三方浏览器可能存在这个问题,不过我的手机测试基本都可以,没问题。