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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM