Не удалось запустить служебный
У меня есть класс обслуживания. Я экспортировал этот класс в jar, и я вставляю jar в свое клиентское приложение.
При необходимости я вызываю класс службы. Когда я пытаюсь сделать это, я получаю следующую ошибку:
Unable to start service Intent {comp={com.sample.service/com.sample.service.serviceClass}} : not found
У меня есть другой класс, кроме класса сервиса, который я могу получить (создать объект этого класса), который находится внутри одной и той же банки.
Я чувствую, что кое-что пропустил в своей конфигурации или манифестах или около того.
Пожалуйста, помогите мне определить то же самое. Мой код ниже:
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
}
Клиент manifest.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>
Спасибо заранее,
Вини
Ответы
Ответ 1
Во-первых, вам не нужно android:process=":remote"
, поэтому, пожалуйста, удалите его, так как все, что он сделает, это взять дополнительную RAM без каких-либо преимуществ.
Во-вторых, поскольку элемент <service>
содержит строку действия, используйте его:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent=new Intent("com.sample.service.serviceClass");
this.startService(intent);
}
Ответ 2
Для кого-то другого, кто сталкивался с этой проблемой, у меня была эта проблема и вытаскивала мои волосы.
У меня была служебная декларация OUTSIDE от <application> 'end tag DUH!
RIGHT:
<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="..." />
Ответ 3
1) проверьте, что объявление службы в манифесте вложен в тег приложения
<application>
<service android:name="" />
</application>
2) проверьте, находится ли ваш service.java
в одном пакете или пакете diff как действие
<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>
Ответ 4
Надеюсь, я тоже смогу помочь кому-то с этой информацией:
Я переместил класс обслуживания в другой пакет, и я исправил ссылки. Проект был прекрасен, НО класс обслуживания не мог быть обнаружен в результате активности.
Наблюдая журнал logcat, я заметил предупреждение о проблеме: активность не смогла найти класс службы, но было странно, что пакет был неправильным, он содержал "/" char. Компилятор искал
com.something./service.MyService
вместо
com.something.service.MyService
Я переместил класс обслуживания из пакета и вернулся, и все работало нормально.
Ответ 5
Я нашел ту же проблему. Я потерял почти один день, пытаясь запустить сервис из OnClickListener
метода - вне onCreate
и через 1 день я все еще не смог!!!! Очень расстраивает!
Я смотрел пример образца RemoteServiceController
. Их работа, но моя реализация не работает!
Единственный способ, который работал у меня, был изнутри onCreate
. Ни один из других вариантов не работал, и поверьте мне, я пробовал их все.
Вывод:
- Если вы поместите свой класс обслуживания в другой пакет, чем mainActivity, я получу всевозможные ошибки.
-
Кроме того, "/" не смог найти путь к службе, попробовал начать с Intent(package,className)
и ничего, а также другого типа запуска Intent
-
Я переместил класс обслуживания в тот же пакет действия
Заключительная форма, которая работает
-
Надеюсь, это поможет кому-то определить листеры onClick
внутри метода onCreate
следующим образом:
public void onCreate() {
//some code......
Button btnStartSrv = (Button)findViewById(R.id.btnStartService);
Button btnStopSrv = (Button)findViewById(R.id.btnStopService);
btnStartSrv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startService(new Intent("RM_SRV_AIDL"));
}
});
btnStopSrv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
stopService(new Intent("RM_SRV_AIDL"));
}
});
} // end onCreate
Также очень важно для файла манифеста, убедитесь, что служба является дочерней для приложения:
<application ... >
<activity ... >
...
</activity>
<service
android:name="com.mainActivity.MyRemoteGPSService"
android:label="GPSService"
android:process=":remote">
<intent-filter>
<action android:name="RM_SRV_AIDL" />
</intent-filter>
</service>
</application>
Ответ 6
В моем случае максимальный размер 1 МБ для передачи данных Intent.
Я просто использую кеш или хранилище.