什麼是 URL Schema?
android中的scheme是一種頁面內跳轉協議,是一種非常好的實現機制,通過定義自己的scheme協議,可以非常方便跳轉app中的各個頁面;通過scheme協議,服務器可以定製化告訴App跳轉那個頁面,可以通過通知欄消息定製化跳轉頁面,可以通過H5頁面跳轉頁面等。
URL Schema應用場景:
客戶端應用可以向操作系統註冊一個 URL scheme,該 scheme 用於從瀏覽器或其他應用中啓動本應用。通過指定的 URL 字段,可以讓應用在被調起後直接打開某些特定頁面,比如商品詳情頁、活動詳情頁等等。也可以執行某些指定動作,如完成支付等。也可以在應用內通過 html 頁來直接調用顯示 app 內的某個頁面。綜上URL Schema使用場景大致分以下幾種:
•服務器下發跳轉路徑,客戶端根據服務器下發跳轉路徑跳轉相應的頁面
•H5頁面點擊錨點,根據錨點具體跳轉路徑APP端跳轉具體的頁面
•APP端收到服務器端下發的PUSH通知欄消息,根據消息的點擊跳轉路徑跳轉相關頁面
•APP根據URL跳轉到另外一個APP指定頁面
URL Schema協議格式:
先來個完整的URL Schema協議格式:
xl://goods:8888/goodsDetail?goodsId=10011002
通過上面的路徑 Schema、Host、port、path、query全部包含,基本上平時使用路徑就是這樣子的。
•xl代表該Schema 協議名稱
•goods代表Schema作用於哪個地址域
•goodsDetail代表Schema指定的頁面
•goodsId代表傳遞的參數
•8888代表該路徑的端口號
URL Schema如何使用:
1.)在AndroidManifest.xml中對<activity />標籤增加<intent-filter />設置Schema
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<activity
android:name= ".GoodsDetailActivity"
android:theme= "@style/AppTheme" >
<!--要想在別的App上能成功調起App,必須添加intent過濾器-->
<intent-filter>
<!--協議部分,隨便設置-->
<data
android:scheme= "xl"
android:host= "goods"
android:path= "/goodsDetail"
android:port= "8888" />
<!--下面這幾行也必須得設置-->
<category
android:name= "android.intent.category.DEFAULT" />
<action
android:name= "android.intent.action.VIEW" />
<category
android:name= "android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
|
2.)獲取Schema跳轉的參數
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
Uri
uri = getIntent().getData();
if
(uri != null )
{
String
url = uri.toString();
Log.e(TAG,
"url:
"
+ uri);
String
scheme = uri.getScheme();
Log.e(TAG,
"scheme:
"
+ scheme);
String
host = uri.getHost();
Log.e(TAG,
"host:
"
+ host);
int
port = uri.getPort();
Log.e(TAG,
"host:
"
+ port);
String
path = uri.getPath();
Log.e(TAG,
"path:
"
+ path);
List<String>
pathSegments = uri.getPathSegments();
String
query = uri.getQuery();
Log.e(TAG,
"query:
"
+ query);
String
goodsId = uri.getQueryParameter( "goodsId" );
Log.e(TAG,
"goodsId:
"
+ goodsId);
}
|
3.)調用方式
網頁上
<a href="xl://goods:8888/goodsDetail?goodsId=10011002">打開商品詳情</a>
原生調用
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
startActivity(intent);
4.)如何判斷一個Schema是否有效
1
2
3
4
5
6
7
|
PackageManager
packageManager = getPackageManager();
List<ResolveInfo>
activities = packageManager.queryIntentActivities(intent, 0 );
boolean
isValid = !activities.isEmpty();
if
(isValid) {
startActivity(intent);
}
|
總結:
Schema的基本使用也就這麼多了,其他的使用在以後用到的時候再做總結。