不能使用@string表示法在AndroidManifest.xml中定义<intent-filter>

Fra*_*per 19 android android-manifest

当我使用"@ string/action_name"来定义intent filter操作时,我的BroadcastReceiver永远不会被调用.如果我将来自strings.xml的相应字符串复制/粘贴到AndroidManifest.xml中,那么它可以完美运行!

AndroidManifest.xml中的工作示例:

<receiver
    android:name=".ServerUpdateReceiver" >
    <intent-filter>
        <action android:name="@string/ACTION_INFORM_USER_SERVER_UPDATE" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml的工作示例:

    <receiver
        android:name=".ServerUpdateReceiver" >
        <intent-filter>
            <action android:name="com.franklinharper.intent.action.ACTION_INFORM_USER_SERVER_UPDATE" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

为了完整起见,strings.xml包含以下行:

<string name="ACTION_INFORM_USER_SERVER_UPDATE">com.franklinharper.intent.action.ACTION_INFORM_USER_SERVER_UPDATE</string>
Run Code Online (Sandbox Code Playgroud)

Fem*_*emi 29

根据规范,无法使用资源标识符配置操作.它必须是一个简单的字符串,可能是为了避免要求Android Intent调度系统打开你的APK以找出过滤器的用途.

  • 如果我理解你和文档,在这种情况下正确地解释了"@ string/name"语法.这是相当令人困惑的,因为ADT插件非常乐意进行自动完成.我试图做的是有一个唯一的动作名称,由代码和清单引用.但这似乎不可能. (4认同)