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
,如需轉載請自行聯系原作者