2012-11-18 38 views
3

我一直不明白類別在意圖過濾器中做了什麼,特別是在這種情況下。意圖過濾器中的這個類是什麼意思?

 <intent-filter> 

      <!-- Receives the actual messages. --> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <!-- Receives the registration id. --> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <category android:name="com.androidhive.pushnotifications" /> 
     </intent-filter> 

回答

4

<category>的一點是要篩選基於您的應用程序/包的名字傳入GCM通知。

GCM的文檔顯示<category android:name="my_app_package" />,因爲您必須註冊特定的應用程序才能允許GCM,所以這很有意義。

如果您仔細考慮,Android設備上可能會有任何已註冊GCM的應用程序。事實上,他們都將使用相同的核心軟件接收消息,這意味着必須有某種方法將消息「路由」到正確的應用程序 - 如果沒有辦法做到這一點,所有GCM註冊的應用程序都會收到別人的消息。

1

這些是Google Cloud Messaging服務使用的意圖。有關這些過濾器的信息,請參閱CGM入門指南中的主題"Writing the Android Application"。這裏的主要信息(尤其是最後一部分):

該廣播接收器是負責處理2名意圖可以通過GCM(com.google.android.c2dm.intent.RECEIVEcom.google.android.c2dm.intent.REGISTRATION)發送,並應在清單中定義(而非編程)這樣即使應用程序沒有運行,也可以接收這些意圖。通過設置com.google.android.c2dm.permission.SEND權限,您可以確保只有GCM系統框架發送的意向纔會發送給接收方(常規應用程序無法發出具有該權限的意向)。

請注意,類別標記中的android:name必須替換爲應用程序的包名稱(目標爲minSdkVersion 16和更高版本的應用程序不需要類別標記)。

+0

這不會回答他關於IntentFilter類別的問題。 – tolgap

+1

@tolgap - 好點。我添加了關於如何使用意圖類別的文檔的相關部分。 –

+0

仍然沒有得到它,什麼是類? – Blake