最近公司有了一個需求,外部連結要能開發本地的APP的操作!我覺得這種操作其實用處挺大的,反正之前我看很多APP都有這個功能,所以就仔細研究了一下,發現實現起來還是很簡單的!
本文知識點
- 通過外部URL開啟本地app
- 獲取傳遞的相應內容
首先我們需要明確的是,移動端都應該做些什麼?我們應該和前端定義好相應的請求頭部!只要確定好這個頭部就能實現跳轉了,最開始我也是這麼做的!之後在說為什麼我需要改?
這裡先來一個簡單的h5頁面,因為我不是前端開發,所以這裡就來個最簡單的!程式碼是這樣的!
<html>
<meta charset="UTF-8">
<body>
<h1>Test Scheme</h1>
<!--手動點選跳轉-->
<a href="test://splash/mypath?content=從html頁面傳過來的值">點選跳轉APP並傳值</a>
</body>
</html>
複製程式碼
準備工作都已經做完了,那麼上下的就是我們的事情了!
1. 通過外部URL開啟本地app
首先我們要理解一個URL的具體含義
有了這個那就好說了!當我們隱式啟動Activity的時候,都需要配置相應的 intent-filter 當你配置這個東西的時候一定會設定相應的屬性,那麼這個東西就更好說了!
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="test" />
<data android:host="splash" />
</intent-filter>
複製程式碼
這裡的test是和伺服器約定好的內容,也就是scheme中的欄位。其實通過以上程式碼,就可以解決相應的跳轉問題了!但是我一直在想一個問題,為什麼需要自己定義scheme這個欄位,為什麼不直接用http或者https呢?最後我發現其實也是可以的!
2. 獲取傳遞的相應內容
關於獲取傳遞內容的方案啊!其實就是從uri中獲取相應的引數而已。這裡就直接上程式碼吧!
Intent intent = getIntent();
if (intent != null) {
//獲取整個uri的連結
String dataString = intent.getDataString();
//獲取相應Uri中的一些內容!
Uri data = intent.getData();
String scheme = data.getScheme();
String authority = data.getAuthority();
String host = data.getHost();
String port = String.valueOf(data.getPort());
String path = data.getPath();
String query = data.getQuery();
}
複製程式碼
這裡可以獲取任何uri中的內容,這裡提一嘴,如果你在閃屏頁處理這裡的邏輯,可以根據path或者port的路徑跳轉到不同的介面。也算是一種方案!!!
今天就到這裡吧!好久不寫部落格了,感覺自己真的是懶癌患者! 其實也不知道寫什麼,所以就記錄每天開發中的內容吧!哈哈。。。