在string.xml中定义时,服务操作不起作用

时间:2012-04-20 11:23:34

标签: android android-manifest android-service

我正面临一个问题。我在string.xml中定义了我的服务操作,并在清单中使用相同的操作:

<service android:name=".MyService" >
    <intent-filter >
        <action android:name="@string/my_service_action" />
    </intent-filter>
</service>

同样在启动服务时我会这样开始:

Intent serviceIntent = new Intent(getResources().getString(R.string.my_service_action));
startService(serviceIntent);

有谁能告诉我问题出在哪里。

如果我硬编码相同的动作值,它的效果非常好。经过一番尝试后,我发现只有在清单文件中使用它才会起作用(例如,硬编码,java代码中的操作值只能显示)。

1 个答案:

答案 0 :(得分:2)

我认为你不能使用字符串引用作为服务的动作字符串。它必须是具体的字符串值。根据javadoc:

  

android:name 使用Java样式命名处理的操作的名称   惯例。 [字符串]

例如:

<service android:name=".MyService" >
    <intent-filter >
        <action android:name="com.demo.service.MY_SERVICE" />
    </intent-filter>
</service>

然后你应该用它作为:

Intent serviceIntent = new Intent("com.demo.service.MY_SERVICE");
startService(serviceIntent);