開啟瀏覽器,掃描某個二維碼時需要啟動特定的App,要實現這樣的需求,我們首先需要解析HTML頁面的二維碼,通常解析後的內容格式為:
<a href="[scheme]://[host]/[path]?[query]">啟動App</a>
//測試連結
<a href="myapp://jp.app/openwith?name=zhangsan&age=26">啟動App</a>
- scheme:判別啟動的App。
- host:適當記述。
- path:傳值時必須的key,沒有可以不傳。
- query:獲取值的Key和Value,沒有可以不傳。
首先,我們開啟Android工程的AndroidManifest.xml配置檔案,然後在啟動頁面Activity下追加以下內容。
<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="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>
</intent-filter>
需要說明的是,intent-filter的內容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】這2個,不能與這次追加的內容混合在一起。因為如果加入了同一個Activity,會導致應用圖示在桌面消失等問題,所以一般情況配置如下。
<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="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>
</intent-filter>
接下來,在Activity中需要取值的地方新增以下程式碼,可以直接寫在OnCreate函式裡的。
val value = intent
val action = value.action
if (Intent.ACTION_VIEW == action) {
val uri: Uri? = value.data
if (uri != null) {
val name: String? = uri.getQueryParameter("name")
val age: String? = uri.getQueryParameter("age")
... //處理業務
}
}
經過上面的處理後,就可以完成瀏覽器掃碼開啟Android/iOS App的功能了。需要注意的是,一定要用自帶瀏覽器或者谷歌瀏覽器,不要用什麼Uc、騰訊瀏覽器。
最近遇到這麼一個需求: 當使用者在手機瀏覽器中點選一個按鈕時,如果手機上已經該應用程式,則直接開啟,如果沒有安裝,則轉向應用下載頁面。 對於這一需求,可以使用【scheme://host:port/path or pathPrefix or pathPattern】的方式,下面的Android的開發文件:
http://developer.android.com/guide/topics/manifest/data-element.html
下面是具體的示例程式碼:
<a id="applink1" href="http://test.xx.com/demo/test.php">開啟</a>
然後,給目標Activity增加以下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:host="test.xx.com "
android:path="/demo/test.php"
android:scheme="http" />
</intent-filter>
增加該filter後,該Activity就能處理 http://test.xx.com/demo/test.php。在瀏覽器中點選“開始”,發起對該URL的請求時,如果本機安裝了這個應用,系統就會彈出一個選擇,詢問你想使用瀏覽器開啟,還是使用該應用開啟。