Не удается запустить намерение службы
у меня есть класс обслуживания. Я экспортировал этот класс в jar, и я встроил jar в свое клиентское приложение.
при необходимости я вызываю класс обслуживания. Когда я пытаюсь сделать это, я получаю следующее сообщение об ошибке:
Unable to start service Intent {comp={com.sample.service/com.sample.service.serviceClass}} : not found
у меня есть другой класс, кроме класса обслуживания, к которому я могу получить доступ (создать объект этого класса), которые находятся внутри того же jar.
Я чувствую, что я пропустил что-то в моей конфигурации или манифесте или около того.
пожалуйста помогите мне идентифицировать то же самое. Мой код ниже:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent () ;
intent.setClassName("com.sample.service" ,"com.sample.service.serviceClass") ;
this.startService(intent) ; // when I call this line I get the message...
// binding other process continue here
}
манифест клиента.xml
<service android:name="com.sample.service.serviceClass"
android:exported="true" android:label="@string/app_name"
android:process=":remote">
<intent-filter><action android:name="com.sample.service.serviceClass"></action>
</intent-filter>
</service>
заранее спасибо,
Винай
4 ответа:
во-первых, вам не нужно
android:process=":remote"
, поэтому, пожалуйста, удалите его, так как все, что он будет делать, это занять дополнительную оперативную память без пользы.во-вторых, так как
<service>
элемент содержит строку действия, используйте ее:public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent=new Intent("com.sample.service.serviceClass"); this.startService(intent); }
для всех, кто сталкивается с этой нитью, у меня была эта проблема, и я вытаскивал свои волосы. у меня было объявление службы за пределами конечного тега '' DUH!
правильно:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> ... <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity ...> ... </activity> <service android:name=".Service"/> <receiver android:name=".Receiver"> <intent-filter> ... </intent-filter> </receiver> </application> <uses-permission android:name="..." />
неправильно, но все равно компилируется без ошибок:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> ... <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity ...> ... </activity> </application> <service android:name=".Service"/> <receiver android:name=".Receiver"> <intent-filter> ... </intent-filter> </receiver> <uses-permission android:name="..." />
1) проверьте, если объявление службы в манифесте вложен в теге приложения
<application> <service android:name="" /> </application>
2) проверьте, если ваш
service.java
находится в том же пакете или пакете diff, что и activity<application> <!-- service.java exists in diff package --> <service android:name="com.package.helper.service" /> </application>
<application> <!-- service.java exists in same package --> <service android:name=".service" /> </application>
Я надеюсь, что смогу помочь кому-то с этой информацией также: Я переместил свой класс обслуживания в другой пакет и исправил ссылки. Проект был совершенно прекрасен, но класс обслуживания не мог быть найден активностью.
наблюдая за входом в logcat, я заметил предупреждение о проблеме: activity не смогла найти класс обслуживания, но забавно, что пакет был неправильным, он содержал символ"/". Компилятор искал
com.что-то./услуга.MyService
вместо
com.что-то.услуга.MyService
я переместил класс обслуживания из пакета и обратно, и все работало просто отлично.