Не удается запустить намерение службы


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

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

я переместил класс обслуживания из пакета и обратно, и все работало просто отлично.