Android 中通過網頁中的連結開啟自己的APP(scheme)
阿新 • • 發佈:2019-01-03
頁面需求:最近遇見一個需求,點選他人分享的資訊,進入一個網頁,網頁中點選“開啟”按鈕,若手機中沒有此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;
}
});
這裡就結束了,若有問題,請多指正。