Android通過瀏覽器開啟app頁面並且傳遞值
阿新 • • 發佈:2019-02-01
最近公司有個需求,要求從第三方網頁端開啟一個網頁,然後在網頁中點選“下載”,“開啟”按鈕,在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://:
- 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頁面。系統內建瀏覽器肯定是可以的,只是第三方瀏覽器可能存在這個問題,不過我的手機測試基本都可以,沒問題。