Tengo una clase de servicio. He exportado esta clase a jar y he incrustado el jar en mi aplicación cliente.
Cuando es necesario, llamo a la clase de servicio. Cuando intento hacer esto, aparece el siguiente error:
Unable to start service Intent {comp={com.sample.service/com.sample.service.serviceClass}} : not found
Tengo otra clase además de la clase de servicio, a la que puedo acceder (crear un objeto de esa clase) que están dentro del mismo frasco.
Siento que me he perdido algo en mi configuración o manifiesto o algo así.
Ayúdame a identificar el mismo. Mi código está abajo:
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
}
Client 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>
Gracias de antemano,
Vinay

Respuestas:
Primero, no es necesario
android:process=":remote", así que elimínelo, ya que todo lo que hará es ocupar RAM adicional sin ningún beneficio.En segundo lugar, dado que el
<service>elemento contiene una cadena de acción, utilícela:public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent=new Intent("com.sample.service.serviceClass"); this.startService(intent); }fuente
android:process=":remote", así que elimínelo, ya que todo lo que hará es ocupar RAM extra sin ningún beneficio. Un servicio remoto es aquel que ofrece una API a través de AIDL y no tiene nada que ver con elandroid:processatributo. Aquí hay un servicio remoto de muestra: github.com/commonsguy/cw-advandroid/tree/master/AdvServices/… y aquí hay un cliente correspondiente de ese servicio: github.com/commonsguy/cw-advandroid/tree/master/AdvServices/ …Para cualquier otra persona que se encuentre con este hilo, tuve este problema y me estaba tirando de los pelos. Tenía la declaración de servicio FUERA de la etiqueta final '<aplicación>' ¡DUH!
CORRECTO:
<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="..." />INCORRECTO pero aún se compila sin errores:
<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="..." />fuente
1) verifique si la declaración de servicio en el manifiesto está anidada en la etiqueta de la aplicación
<application> <service android:name="" /> </application>2) compruebe si
service.javaestá en el mismo paquete o paquete diferente que la actividad<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>fuente
Espero poder ayudar a alguien con esta información también: moví mi clase de servicio a otro paquete y arreglé las referencias. El proyecto estaba perfectamente bien, PERO la actividad no pudo encontrar la clase de servicio.
Al mirar el log en logcat noté la advertencia sobre el problema: la actividad no pudo encontrar la clase de servicio, pero lo curioso fue que el paquete era incorrecto, contenía un carácter "/". El compilador estaba buscando
en vez de
Saqué la clase de servicio del paquete y volví a entrar y todo funcionó bien.
fuente
En mi caso, el límite máximo de 1 MB para el transporte de datos por intención. Solo usaré Caché o Almacenamiento.
fuente
Encontré el mismo problema. Perdí casi un día tratando de iniciar un servicio desde el
OnClickListenermétodo: fuera delonCreatey después de 1 día, ¡todavía fallé! ¡Muy frustrante! Estaba mirando el ejemplo de muestraRemoteServiceController. El suyo funciona, ¡pero mi implementación no funciona!La única forma en que funcionaba para mí era desde adentro
onCreatemétodo . Ninguna de las otras variantes funcionó y créanme que las he probado todas.Conclusión:
Además, el "/" no pudo encontrar la ruta al servicio, intentó comenzar con
Intent(package,className)y nada, también otro tipo de Intent comenzandoMoví la clase de servicio en el mismo paquete de la actividad Forma final que funciona
Con suerte, esto ayuda a alguien al definir los listerners
onClickdentro delonCreatemétodo de esta manera: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 onCreateTambién es muy importante para el archivo de manifiesto, asegúrese de que el servicio sea hijo de la aplicación:
<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>fuente