一、什麼是自定義URI
自定義URI是指我們可以通過定義一些特定的協議(如:myapp://)和特定的URI結構(如:myapp://page/home)來讓其他應用或者網頁調用我們的應用,從而實現應用間相互跳轉的功能。自定義URI也被稱為「Scheme URL」。
在Android平台上,我們可以通過定義intent-filter來監聽指定的URI,並在URI被調用時啟動相應的Activity。實現自定義URI功能需要完成以下兩個步驟:
- 在AndroidManifest.xml文件中定義intent-filter,引導系統將這個URI轉發到App相應的Activity中。
- 在相應的Activity中獲取URI數據,並根據傳遞的參數執行相應的操作。
下面我們將對這兩個步驟進行詳細的介紹。
二、定義intent-filter
對於我們的應用,我們需要在AndroidManifest.xml文件中定義一個intent-filter。這個intent-filter定義了一個URI的規則,以及當這個URI被調用時,Android系統應該啟動哪個Activity。下面是一個示例:
<activity android:name=".MainActivity"> <intent-filter> <data android:scheme="myapp" android:host="page" android:pathPrefix="/home" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
在上面的代碼中,我們定義了一個Activity,並為這個Activity定義了一個intent-filter。其中,我們使用了data元素設置了這個URI的規則,scheme用於設置協議,host用於設置URI的主機名,pathPrefix用於設置路徑匹配規則。我們設置的URI規則為「myapp://page/home」。
同時,在intent-filter中,我們還通過設置action和category元素來指示這個Activity是響應View Intent,並且支持在瀏覽器中打開這個URI。
三、獲取URI數據並執行操作
在我們定義了intent-filter之後,我們需要在響應這個URI的Activity中獲取URI數據。我們可以通過Intent對象的getData()方法來獲取URI數據。下面是一個示例:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = getIntent(); Uri data = intent.getData(); if (data != null) { String host = data.getHost(); String path = data.getPath(); //todo 根據host和path執行相應的操作 } }
在上面的代碼中,我們在Activity的onCreate()方法中,通過getIntent()方法獲取到啟動這個Activity的Intent對象,並通過getData()方法獲取了URI數據。在獲取到URI數據之後,我們可以通過host和path來判斷調用這個URI時傳遞的參數,並根據參數來執行相應的操作。
四、小結
通過自定義URI,我們可以實現應用間相互跳轉的功能。在Android平台上,我們可以通過定義intent-filter來監聽指定的URI,並在URI被調用時啟動相應的Activity。實現自定義URI功能需要完成兩個步驟:在AndroidManifest.xml文件中定義intent-filter,引導系統將這個URI轉發到App相應的Activity中;在相應的Activity中獲取URI數據,並根據傳遞的參數執行相應的操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271827.html