Ubicación Actualizaciones de ubicación de solicitudes de cliente con extras parcelables en PendingIntent
Estoy usando LocationClient con PendingIntent para obtener actualizaciones de ubicación.
PendingIntent.getService(context, 0, new Intent(context, OnLocationAvail.class), PendingIntent.FLAG_UPDATE_CURRENT)
El código de arriba funciona bien. Obtengo la ubicación de la clave LocationClient.KEY_LOCATION_CHANGED
Pero cuando tengo unos extras de datos parcelables como se describe a continuación, el servicio se llama con los datos parcelables pero la clave LocationClient.KEY_LOCATION_CHANGED en los extras de intención siempre es nula.
Intent callbackIntent = new Intent(context, OnLocationAvail.class); callbackIntent.putExtra(SOME_KEY, PARCELABLE_DATA); PendingIntent.getService(context, 0, callbackIntent, PendingIntent.FLAG_UPDATE_CURRENT);
El problema fue cuando el LocationClient empuja una actualización a través de la devolución de llamada PendingIntent, el proceso no tiene ninguna información del ClassLoader ya que está ocurriendo fuera del contexto de la aplicación y en un proceso diferente.
El siguiente enlace me ayudó a reducir el problema. https://code.google.com/p/android/issues/detail?id=6822
Solución:
Utilice un paquete de hack cuando solicite una actualización de ubicación.
Bundle bundle = new Bundle(); bundle.putParcelable("com.foo.parcel", some_parcel); callbackPendingIntent.putExtra("com.foo.bundle",bundle);
Al recibir la actualización de la ubicación.
Bundle oldBundle = intent.getBundleExtra("com.foo.bundle"); some_parcel = oldBundle.getParcelable("com.foo.parcel");