我正面临一个问题。我在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代码中的操作值只能显示)。
答案 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);