无法使用@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>
来自spec,无法使用资源标识符配置操作。它必须是一个简单的字符串,可能是为了避免要求Android Intent调度系统打开APK来确定过滤器的用途。
如果我理解你和文档,在这种情况下,“@ string/name”语法没有被解释。这很令人困惑,因为ADT插件非常乐意进行自动完成。我试图做的是有一个独特的行为名称,这是由守则和清单引用的。但这似乎不可能。 – 2012-04-17 11:18:31
这很令人伤心,因为我想让所有事情都保持稳定,但没关系。 – 2018-01-12 05:42:26
这种事情让我哭泣。我浪费了将近1小时,试图弄清楚为什么我的'BroadcastReceiver'没有触发。使用字符串资源是有意义的,因为您将所有内容都放在一个地方,避免了重复的常量。现在想象一下,有人来到Manifest,而不是在其他地方改变了行动的字符串......可悲。 – 2016-09-20 14:36:45
这很奇怪,谢谢你的问题 – 2016-09-26 06:49:04