1. 程式人生 > >Android通過瀏覽器開啟app頁面並且傳遞值

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頁面。系統內建瀏覽器肯定是可以的,只是第三方瀏覽器可能存在這個問題,不過我的手機測試基本都可以,沒問題。