Действие службы не работает, если оно определено в string.xml

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);

Может ли кто-нибудь сказать мне, где проблема.

Если я нажимаю одно и то же значение действия, он отлично работает. После нескольких попыток n я обнаружил, что он не работает только при использовании в файле манифеста (например, жесткий код, значение действия в java-коде только не отображается).

Теги:
android-service
android-manifest

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);
  • 0
    Привет Вакас. Спасибо за ответ, но ваш ответ говорит, что action должно быть конкретным строковым значением, но я не видел того же в Java-doc. Также манифест использует некоторые другие атрибуты в манифесте, например, что я делаю. Например, android: lable = "@ string / app_name". Итак, вопрос в том, почему он не работает для атрибута действия?
  • 0
    Если вы наведете указатель мыши на ярлык, он скажет A user-legible name for the given item. [string, reference] , которая означает , что он позволяет установить либо строку или Reference строки. Так что на самом деле это говорит вам, что ему нужно. Теперь, если вы посмотрите тот, который я опубликовал, он говорит только String, что означает, что вы не можете использовать ссылку. Вы можете убедиться в этом сами в манифесте :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню