1

我面临一个奇怪的问题。我已经在清单中定义了我的服务操作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 代码中硬编码动作值而不是清单)。

4

1 回答 1

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);
于 2012-04-20T11:32:12.490 回答