天天看點

Intent過濾器學習

Intent過濾器是一種根據Intent中的動作(Action)、類别(Categorie)和資料(Data)等内容,對适合接收該接收Intent的元件進行和篩選的機制,Intent過濾器還可以比對資料類型、路徑和協定,還包括可以用來确定多個比對項優先級(Prprity),應用程式的Activity元件、Service元件和BroadcaseReceiver都可以注冊Intent過濾器,這樣,這些元件在特定的資料格式上則可以産生相應的動作。

注冊過濾在AndroidManifest.xml檔案中定義

Intent節點屬性

1.<action>:  android:name--->指定元件所能響應的動作,用字元串表示,通常使用JAVA類名和名的完全限定名構成

2.<category>: android:category -->指定以何種方式去服務Intent請求的動作<一個程式中可以有多個Category标簽哦>

3.<data>:

3.1:Android:host --> 指定一個有效的主機名

3.2:android:mimetype --> 指定元件能處理的資料類型

3.3: android:path --> 有效的URI路徑名

3.4:android:port -->主機的有效端口号

3.5:android:schme--> 所需要的特定的協定

Android系統提供的類别(Category)

ALTERNATIVE:Inent資料預設動作的一個可替換的執行方法

DRLRVYRF_ALTERNATIVE:和ALTERNATIVE類似,但替換的執行方法還是指定的, 而是被解析出來的

BROWSABLE:聲明Activity可以由浏覽器啟動

DEFAULT:為Intent過濾器中定義的資料提供預設動作

HOME:裝置啟動後顯示的第一個Activity

LAUNCHER:在應用程式啟動時首先被顯示

AndroidManifest.xml檔案中的每個元件的<intent-filter>都被解析成一個Intent過濾器對象,當應用程式安裝到Android系統時,所有的元件和Intent過濾器都會注冊到Android系統中,這樣,Android系統便亂箭了如何将任意一個Intent請求通過Intent過濾器映射到相應的元件上。

Intent到Intent過濾器的映射過程稱為:“Intent解析”,Intent解析的比對規則如下:

1.Android系統把所有應用程式包中的Intent過濾器集合在一起,形成一個完整的Intent過濾器清單。

2.在進行比對時,Android系統會将清單中所有Intent過濾器的“動作”和“類别”與Intent進行比對,任何不比對  的Intent過濾器都将被過濾掉,沒有指定動作的Intent過濾器可以比對任何的Intent,但是沒有指定"類别"的過濾器隻能比對沒有“類别”的Intent….吼吼。 。。

3.把Intent資料的Uri的每個子部與Intent過濾器的<data>标簽中的屬性

進行比對,如果<data>标簽指定了協定、主機名、路徑名或或MIME的類型,那麼這些屬性都要與Intent的Uri資料部分進行比對,任何不比對的Intent過濾器都會被過濾掉。

4.如果Intent過濾器多于一個,則可以根據在<inter-filter>标簽中定義的優先級标簽來對Intent過濾器進行排序,優先級最高的Intent過濾器将被選擇。

Intent的另一種用途是改善廣播消息。應用程式與Android系統都可以用Intent改善廣播消息,如果應用程式注冊了BroadcastReceiver,則可以接收到指定的廣播消息。

String UNIQUE_STRING="com.mzh.www.BroadcastReceiverDemo"

Intent intent = new Intent(UNIQUE_STRING);

intent.putExtra("key1","XXX");

intent.putExtra("key2","YYY");

sentBroadCast(intent);

在構造Intent對象時必須用一個全局唯一的字元串辨別其要執行的動作,通常使用應用程式包的名稱,如:UNIQUE_STRING

BroadcastReceiver用于監聽廣播消息,可以在全局檔案或代碼中注冊,如:

public class MyBroadcastReceiver extends BroadcastReceiver{

@Override

//此方法必須重寫

public void onReceiver(Context context, Intent intent ){

此處省略一萬字,,,吼吼。。

}

此處:onReceiver()方法必須要在5秒鐘執行完畢,否則Android系統會認為該元件失去響應,并提示使用者執行強制關閉的

在xml檔案中注冊廣播接收器:

<receiver android:name=".繼承BroadcastReceiver的類名">

<intent-filter>

<action android:name="此處為sentBroadCast(intent)的值一辨別">

</intent-filter>

</receiver>

     本文轉自華華世界 51CTO部落格,原文連結:

http://blog.51cto.com/mzh3344258/733362

,如需轉載請自行聯系原作者

繼續閱讀