2012-04-17 17 views
16

當我使用「@ string/action_name」定義意圖過濾器操作時,我的BroadcastReceiver永遠不會被調用。如果我將strings.xml中相應的字符串複製/粘貼到AndroidManifest.xml中,那麼它完美地工作!從AndroidManifest.xml中無法使用@string表示法在AndroidManifest.xml中定義<intent-filter>

工作示例:從AndroidManifest.xml中

<receiver 
    android:name=".ServerUpdateReceiver" > 
    <intent-filter> 
     <action android:name="@string/ACTION_INFORM_USER_SERVER_UPDATE" /> 
    </intent-filter> 
</receiver> 

工作例如:

<receiver 
     android:name=".ServerUpdateReceiver" > 
     <intent-filter> 
      <action android:name="com.franklinharper.intent.action.ACTION_INFORM_USER_SERVER_UPDATE" /> 
     </intent-filter> 
    </receiver> 

只是爲了保持完整性,strings.xml中包含以下行:

<string name="ACTION_INFORM_USER_SERVER_UPDATE">com.franklinharper.intent.action.ACTION_INFORM_USER_SERVER_UPDATE</string> 
+1

這種事情讓我哭泣。我浪費了將近1小時,試圖弄清楚爲什麼我的'BroadcastReceiver'沒有觸發。使用字符串資源是有意義的,因爲您將所有內容都放在一個地方,避免了重複的常量。現在想象一下,有人來到Manifest,而不是在其他地方改變了行動的字符串......可悲。 – 2016-09-20 14:36:45

+0

這很奇怪,謝謝你的問題 – 2016-09-26 06:49:04

回答

26

來自spec,無法使用資源標識符配置操作。它必須是一個簡單的字符串,可能是爲了避免要求Android Intent調度系統打開APK來確定過濾器的用途。

+4

如果我理解你和文檔,在這種情況下,「@ string/name」語法沒有被解釋。這很令人困惑,因爲ADT插件非常樂意進行自動完成。我試圖做的是有一個獨特的行爲名稱,這是由守則和清單引用的。但這似乎不可能。 – 2012-04-17 11:18:31

+0

這很令人傷心,因爲我想讓所有事情都保持穩定,但沒關係。 – 2018-01-12 05:42:26

相關問題