No se puede iniciar la intención del servicio
Tengo una clase de servicio. He exportado esta clase al tarro y he embed el tarro en mi aplicación del cliente.
Cuando sea necesario, llamo a la clase de servicio. Cuando intento hacer esto, consigo el error siguiente:
- Cómo enviar la ubicación del dispositivo en el servidor cuando sea necesario
- SMS Broadcast Receiver no funciona después de reiniciar
- Cómo detener un IntentService mientras hay muchos IntentService en ejecución
- Cómo solicitar un IntentService para obtener información sobre su cola
- Detener servicio cuando la aplicación está cerrada
Unable to start service Intent {comp={com.sample.service/com.sample.service.serviceClass}} : not found
Tengo otra clase aparte de la clase de servicio, a la que puedo acceder (crear el objeto de esa clase) que están dentro del mismo tarro.
Siento que he perdido algo en mi configuración o manifiesto.
Por favor, ayúdame a identificar lo 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 }
Cliente 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 por adelantado,
Vinay
- Android: stopService () no llama a onDestroy ()!
- ¿Necesito agregar un filtro de intenciones al iniciar un servicio?
- Recibe mensajes MMS en Android KitKat
- Problema al ejecutar un script desde init.rc en el arranque del dispositivo
- No recibe devoluciones de llamada CountDownTimer en Service
- Hilos de aplicación vs Hilos de servicio
- Enviar datos de Servicio a mi actividad
- ¿Cómo reiniciar un servicio después de haber sido asesinado por aplicaciones como "Advanced Task Killer"?
Primero, no necesitas android:process=":remote"
, así que por favor, quítalo, ya que todo lo que hará es ocupar RAM adicional sin ningún beneficio.
En segundo lugar, dado que el elemento <service>
contiene una cadena de acción, úsela:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent=new Intent("com.sample.service.serviceClass"); this.startService(intent); }
Para cualquier persona que viene a través de este hilo que tenía este problema y estaba tirando de mi pelo. ¡Tenía la declaración de servicio FUERA de la etiqueta del final de la '<aplicación>' DUH!
DERECHO:
<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="..." />
ERROR pero todavía 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="..." />
1) compruebe si la declaración de servicio en manifesto está anidada en la etiqueta de aplicación
<application> <service android:name="" /> </application>
2) compruebe si su service.java
está en el mismo paquete o paquete de dif como 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>
Espero poder ayudar a alguien con esta información también: Me cambié mi clase de servicio en otro paquete y fijé las referencias. El proyecto estaba perfectamente bien, pero la clase de servicio no pudo ser encontrada por la actividad.
Al ver el log en logcat me di cuenta de 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 "/" char. El compilador estaba buscando
Com.something./service.MyService
en lugar de
Com.something.service.MyService
Me cambié la clase de servicio fuera del paquete y volver y todo funcionó bien.
En mi caso el límite máximo de 1 MB para el transporte de datos por Intent. Sólo usaré Caché o Almacenamiento.
He encontrado el mismo problema. Perdí casi un día tratando de iniciar un servicio de OnClickListener
método – fuera de la onCreate
y después de 1 día, todavía no! ¡Muy frustrante! Estaba mirando el ejemplo de ejemplo RemoteServiceController
. Su trabajo, pero mi aplicación no funciona!
La única manera que estaba trabajando para mí, era de dentro del método onCreate
. Ninguna de las otras variantes funcionó y créanme que he probado todos ellos.
Conclusión:
- Si pones tu clase de servicio en un paquete diferente del mainActivity, obtendré todo tipo de errores
-
También el "/" no pudo encontrar la ruta al servicio, intentó comenzar con
Intent(package,className)
y nada, también otro tipo de intención de inicio -
Moví la clase de servicio en el mismo paquete de la actividad Formulario final que funciona
-
Esperemos que esto ayude a alguien mediante la definición de los lisellerers
onClick
dentro del métodoonCreate
como este: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
También es muy importante para el archivo de manifiesto, asegúrese de que el servicio es 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>
- ¿Cuáles son las mejores prácticas para usar el cifrado AES en Android?
- Android N Java 8 características (Jack compilador) y Kotlin interoperabilidad