Подтвердить что ты не робот

Не удалось запустить служебный

У меня есть класс обслуживания. Я экспортировал этот класс в 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>

Спасибо заранее,
Вини

4b9b3361

Ответ 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. Я просто использую кеш или хранилище.