Creo que lo que estás buscando es algo como esto. Hay una versión de LocationManager.requestLocationUpdates()
que toma un PendingIntent
como parámetro, y esta intención podría usarse para disparar un BroadcastReceiver
. Este código registrará una transmisión personalizada para disparar con las actualizaciones de ubicación.
Intent intent = new Intent("UNIQUE_BROADCAST_ACTION_STRING_HERE");
LocationManager manager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
long minTime; //This should probably be fairly long
float minDistance; //This should probably be fairly big
String provider; //GPS_PROVIDER or NETWORK_PROVIDER
PendingIntent launchIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
manager.requestLocationUpdates(provider, minTime, minDistance, launchIntent);
A continuación, sólo tiene que registrar su BroadcastReceiver
con la misma acción Intención y se recibirán las actualizaciones de ubicación para su procesamiento. Y, por supuesto, mantenga ese PendingIntent
porque tendrá que llamar al manager.removeUpdates(launchIntent)
en algún momento.
Nota final:
Porque suena como si estuviera tratando de implementar actualizaciones de ubicación normales, mientras que su aplicación no está en primer plano, tenga esto en cuenta. A menos que desee que su aplicación sea calificada como un asesino de baterías, tenga mucho cuidado con la forma de implementar esta funcionalidad.
Deseará reducir en gran medida las actualizaciones de frecuencia de ubicación con un parámetro minTime o minDistance grande para permitir que descanse el servicio de ubicación. Esta función también se debe adjuntar a una preferencia controlada por el usuario para que pueda habilitar/deshabilitar su aplicación de la ubicación de seguimiento en segundo plano.
¡Espero que eso ayude!
Aquí tiene http://developer.android.com/reference/android/location/LocationListener.html – schwiz