Lanzar una excepción personalizada de un servicio a una actividad

Actualmente estoy trabajando en una aplicación XMPP 'en Android y estoy pensando en la mejor manera de lanzar un tipo diferente de Excepción que una RemoteException a mi actividad de mi servicio.

Como parece imposible lanzar otra cosa que una RemoteException usando IPC (no se puede declarar a tirar nada en su .aidl), sólo veo dos soluciones:

  • Crear un oyente para mi actividad para escuchar en mi excepción XMPP personalizado, que de hecho no se lanzará, sino que sólo se envía como un objeto habitual implementar el protocolo Parcelable.

  • Coge mi XMPPException y lanzar una RemoteException (con un contenido actualizado con mi XMPPException) – Pero en ese caso, ¿cómo podría saber en mi actividad si se trata de una XMPP o una RemoteException real? Marcando el nombre de la excepción y analizándolo en mi actividad? Sería realmente gore.

Tiene alguna idea ? ¿He extrañado algo de la documentación del SDK?

Gracias.

2 Solutions collect form web for “Lanzar una excepción personalizada de un servicio a una actividad”

Si # 1 significa lo que creo que hace, usaría eso: haga que el servicio capture la excepción y llame a un método en un objeto de devolución de llamada definido por AIDL creado y suministrado por la actividad.

Puedes ver un ejemplo de esa técnica en este proyecto de cliente y servicio , de uno de mis libros.

Parece que podemos lanzar excepciones personalizadas derivadas de RemoteException. Así que puede tener XMPPRemoteException, o simplemente un MyRemoteException genérico que mantendrá la excepción original. A continuación se muestra una demostración para el segundo caso:

Servidor:

try { ... } catch(XMPPException e) { throw new MyRemoteException(e); } 

Cliente:

 try { service.someCall(); } catch(MyRemoteException e) { rethrow(e); } 

Método auxiliar:

 private void rethrow(MyRemoteException e) throws Exception { if(e.innerException instanceof XMPPException) throw (XMPPException)e.innerException; else throw e.innerException; } 

Excepción:

 public class MyRemoteException extends RemoteException { private static final long serialVersionUID = 1L; public Exception innerException; public MyRemoteException() {} public MyRemoteException(Exception innerException) { this.innerException = innerException; } } 
  • Servicio con cola de prioridad en Android
  • "No se puede realizar esta acción en una instancia no sellada" excepción java.lang.IllegalStateException
  • El archivo AIDL no genera un archivo Java
  • En Android: ¿Cómo llamar a la función de la actividad de un servicio?
  • Acceda a Running service y llame a su método?
  • No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () en CountDownTimer
  • Cómo saber si el usuario está en la pantalla de bloqueo desde el servicio
  • El punto de interrupción en servicio no funciona
  • Android - widget de actualización sobre el servicio con datos de la red. ¿El mejor enfoque?
  • ¿Es posible ejecutar mi servicio por tiempo indefinido?
  • No puedo encontrar la causa de mi accidente con este seguimiento de pila
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.