1. 程式人生 > >Android 中通過網頁中的連結開啟自己的APP(scheme)

Android 中通過網頁中的連結開啟自己的APP(scheme)

       頁面需求:最近遇見一個需求,點選他人分享的資訊,進入一個網頁,網頁中點選“開啟”按鈕,若手機中沒有此APP則下載,我給的是我們公司官網上的下載地址,若手機中有此APP則開啟,開啟地址就是我們今天要說的。其他需求,通過用手機的瀏覽器(內建,第三方都可)訪問一個網頁,實現從網頁中點選一個連結啟動自己的應用,並傳遞資料。

理解

一個連結地址URL Scheme的協議格式如下:

<a href="[scheme]://[host]/[path]?[query]"> 喚起應用 </a>

scheme:代表Scheme的協議名稱(必須)

host和path可選擇新增

query:代表URL傳遞的資料

配置

        首先在AndroidManifest.xml清單檔案中找到你的主頁Activity配置相關資訊

<activity
        android:name="com.example.helloworld.MainActivity" >
        <intent-filter>
                <action android:name="android.intent.action.MAIN" />
     
                <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
	        <action android:name="android.intent.action.VIEW"/>   
		<category android:name="android.intent.category.DEFAULT"/>             
		<category android:name="android.intent.category.BROWSABLE"/>
		<data android:scheme="zyt" android:host="app" android:pathPrefix="/openwith"/>
        </intent-filter>
</activity>

注意:上面兩個intent-filter裡的配置資訊必須分開。

結果:只需要在AndroidManifest.xml清單檔案中配置這些就可以開啟APP了。

驗證方式:建立一個網頁,建立一個連結例如<a href="zyt://app/openwith?id=20181015">開啟app</a>或者把你配置好的地址給後臺,直接在專案中驗證。和IOS的不一樣,我看見我們的IOS可以直接在遊覽器中輸入連結地址開啟APP,Android不能,只能經過一個網頁。

獲取連結資料:若是你還需要獲取地址中的資料,請看下面。

如果使用Java獲取:

public class SplashActivity extends AppCompatActivity{

        @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
                Intent intent = getIntent();
		String scheme = intent.getScheme();
		Uri uri = intent.getData();
		if (uri != null) {
			String host = uri.getHost();
			String path = uri.getPath();
			String queryString = uri.getQuery();
                        String test1 = uri.getQueryParameter("arg0");//引數1
                        String test2 = uri.getQueryParameter("arg1");//引數2
                }
        }
}

如果使用WebView訪問該網頁,獲取資料的操作為:

webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Uri uri=Uri.parse(url);
                if(uri.getScheme().equals("zyt")&&uri.getHost().equals("app")){
                    String arg0=uri.getQueryParameter("arg0");
                    String arg1=uri.getQueryParameter("arg1");
                }else{
                    view.loadUrl(url);
                }
                return true;
            }
        });

這裡就結束了,若有問題,請多指正。