最近公司有個需求,要求從第三方網頁端打開一個網頁,然后在網頁中點擊“下載”,“打開”按鈕,在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頁面。系統內置瀏覽器肯定是可以的,只是第三方瀏覽器可能存在這個問題,不過我的手機測試基本都可以,沒問題。