AndroidManifest.xml檔案詳解(receiver)

來源:互聯網
上載者:User

文法(SYNTAX):

<receiverandroid:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:icon="drawable resource"
          android:label="string resource"
          android:name="string"
          android:permission="string"
          android:process="string">
    . . .
</receiver>

被包含於(CONTAINED IN):

<application>

能夠包含的元素(CAN CONTAIN):

<intent-filter>

<meta-data>

說明(DESCRIPTION):

這個元素用於聲明一個廣播接收器(一個BroadcastReceiver 子類),作為應用程式的組件之一。廣播接收器能夠讓應用程式接收那些由系統或其他應用程式發出的廣播Intent對象,即使是在該應用程式的其他組件沒有啟動並執行時候,也能夠接收來自系統或其他應用程式的廣播訊息。

有兩種方式讓系統知道本應用程式使用者一個廣播接收器:

1. 在應用程式的資訊清單檔中,使用本元素來聲明註冊一個廣播接收器;

2. 在代碼中動態建立一個廣播接收器,並使用Context.registerReceiver()方法來註冊它。有關更多動態建立接收器的方法,請看BoradcastReceiver類說明。

 

屬性(ATTRIBUTES):

android:enabled

這個屬性用於定義系統是否能夠執行個體化這個廣播接收器,如果設定為true,則能夠執行個體化,如果設定為false,則不能被執行個體化。預設值是true。

<application>元素有它自己的enabled屬性,這個屬性會應用給應用程式的所有組件,包括廣播接收器。<application>和<receiver>元素的這個屬性都必須是true,這個廣播接收器才能夠被啟用。如果有一個被設定為false,該廣播接收器會被禁止執行個體化。

android:exported

這個屬性用於指示該廣播接收器是否能夠接收來自應用程式外部的訊息,如果設定true,則能夠接收,如果設定為false,則不能夠接收。如果設定為false,這該接收只能接收那些由相同應用程式組件或帶有相同使用者ID的應用程式所發出的訊息。

它的預設值依賴它所包含的Intent過濾器。如果不包含過濾器,則接收器只能由指定了明確類名的Intent對象來調用,這就意味著該接收器只能在應用程式內部使用(因為通常在應用程式外部是不會知道這個類名的)。這種情況下預設值就是false。另一方面,如果接受器至少包含了一個過濾器,那麼就意味著這個接收器能夠接收來自系統或其他應用程式的Intent對象,因此預設值是true。

這個屬性不是唯一的限制廣播接收外部調用的方法,還能夠通過全限來限制能夠給它發送訊息的外部實體。

android:icon

這個屬性定義了一個代表廣播接收器的表徵圖,這個屬性必須用包含圖片定義的可繪製資源來設定。如果沒有設定這個屬性,會是應用<application>元素的icon屬性值來代替。

無論是這個屬性還是<application>元素的icon屬性,它們設定的表徵圖也是所有的接收器的Intent過濾器的預設表徵圖。

android:label

這個屬性給廣播接收器設定一個使用者可讀的懂的文字標籤。如果這個屬性沒有設定,那麼就會使用<application>元素的label屬性值來代替。

無論是這個屬性還是<application>元素的label屬性,它們設定的標籤也是所有的接收器的Intent過濾器的預設標籤。

應該使用一個字串資源來設定這個屬性,以便它能夠像使用者介面中的其他字串一樣能夠被本地化。但是,為了應用開發的便利,也能夠使用原生的字串來設定。

android:name

這個屬性值要用廣播接收器的實作類別的類名來設定,它是BroadcastReceiver類的一個子類。通常要使用類的全名來設定(如:com.example.project.ReportReceiver)。但是,也可以使用簡寫(如:.ReportReceiver)。系統會自動的把<manifest>元素中的package屬性所設定的包名添加到這個簡寫的名稱上。

一旦發布了應用程式,就不應該在改變這個名字了(除非android:exported=”false”)。

這個屬性沒有預設值,這個名字必須被指定。

android:permission

這個屬性用於定義把訊息發送給該廣播接收器的廣播器所必須要有的許可權。如果沒有設定這個屬性,那麼<application>元素的permission屬性所設定的許可權就適用於這個廣播接收器。如果<application>元素也沒有設定許可權,那麼該接收器就不受許可權的保護。

android:process

這個屬性用於設定該廣播接收器應該運行在那個進程中的進程名。通常,應用程式的所有組件都在給應用程式建立的預設進程中運行,它有與應用程式套件組合名相同的名稱。<application>元素的process屬效能夠給它的所有組件設定一個不同的預設進程,但是它的每個組件自己的process屬效能夠覆蓋這個預設設定,這樣就允許把一個應用程式分離到多個進程中。

如果這個屬性值用“:”開頭,則在需要的時候系統會建立一個新的,應用程式私人的進程,並且該廣播接收器也會運行在這個進程中。如果這個屬性值用小寫字母開頭,那麼接收器就會運行在以這個屬性值命名的全域進程中,它提供使其工作的許可權。這樣就允許不同的應用程式組件來共用這個進程。

被引入版本(INTRODUCED IN):

API Level 1

 


摘自 FireOfStar的專欄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.