无法使用@string表示法在AndroidManifest.xml中定义

问题描述:

当我使用“@ 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

来自spec,无法使用资源标识符配置操作。它必须是一个简单的字符串,可能是为了避免要求Android Intent调度系统打开APK来确定过滤器的用途。

+4

如果我理解你和文档,在这种情况下,“@ string/name”语法没有被解释。这很令人困惑,因为ADT插件非常乐意进行自动完成。我试图做的是有一个独特的行为名称,这是由守则和清单引用的。但这似乎不可能。 – 2012-04-17 11:18:31

+0

这很令人伤心,因为我想让所有事情都保持稳定,但没关系。 – 2018-01-12 05:42:26