Me gustaría saber cómo recibir el GPS cuando la aplicación de Android está en segundo plano. ¿Hay un tutorial completo para explicarlo?Ejecutar escucha de GPS en segundo plano en Android
Respuesta
Puede utilizar un servicio que siempre se ejecuta en segundo plano ... y en el servicio de fondo puede obtener la latitud y longitud actual y puede convertir aún más estos lats y longs en la ubicación adecuada utilizando la clase de geocodificador de Android ... comprobar el siguiente vínculo:
lo que se va a hacer en actividad se puede realizar en el servicio also..in la onStart() de servicio ....
Es necesario utilizar Concepto de servicio en lugar de actividad. http://developer.android.com/guide/components/services.html
Aquí es una buena muestra: Background service needs to send GPS location on server
Es necesario utilizar un AlarmManager para activar un intento pendientes (a través de un receptor de radiodifusión) para poner en marcha un servicio en segundo plano.
algunos ejemplos de código para usted
En su MainActivity
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent notifyintent = new Intent(this, OnAlarmReceiver.class);
notifyintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
notifyintent.setAction("android.intent.action.NOTIFY");
PendingIntent notifysender = PendingIntent.getBroadcast(this, 0, notifyintent,
PendingIntent.FLAG_UPDATE_CURRENT);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 20 * 1000,
notifysender);
clase AlarmReceiver
public class OnAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// PullPendingRequests.acquireStaticLock(context)
try {
lock = getLock(context);
lock.acquire();
context.startService(new Intent(context, UpdateCustomerRequests.class));
} finally {
if (lock.isHeld()) {
lock.release();
}
}
}
El BroadcastReceiver
private static final String NAME = "com.commonsware.cwac.wakeful.WakefulIntentService";
private static volatile PowerManager.WakeLock lockStatic = null;
private static PowerManager.WakeLock lock;
// Needed since network will to work when device is sleeping.
synchronized private static PowerManager.WakeLock getLock(Context context) {
if (lockStatic == null) {
PowerManager mgr = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
lockStatic = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, NAME);
lockStatic.setReferenceCounted(true);
}
return (lockStatic);
}
}
El Servicio de fondo. Aquí hasta 2 puntos importantes aviso
- WakeLock, para asegurar que su dispositivo se activa y utiliza la red en el fondo
- un corte para LocationManager para trabajar. Tuve que depurar esto durante aproximadamente 2 semanas, créanme, lo necesitan. requestLocationUpdates y getLastKnownLocation simplemente no le dará la ubicación cuando lo desee. De ahí el AlarmManager (que funciona mucho mejor que una cosa java TimerTask).
Todo esto funciona en una aplicación de producción en Play Store.
public class UpdateCustomerRequests extends IntentService implements LocationListener {
private static Context mainContext;
public UpdateCustomerRequests() {
super("UpdateCustomerRequests");
mHandler = new Handler();
me = this;
}
public static UpdateCustomerRequests getService() {
if (me == null)
me = new UpdateCustomerRequests();
return me;
}
@Override
final protected void onHandleIntent(Intent intent) {
mainContext = getApplicationContext();
Location myLocation;
if (HomeScreen.getLocationManager() != null) {
// this is needed to trigger a background location change. Since LocationManager does not work on Samsung phones. Its a hack needed.
HomeScreen.getLocationManager().requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(final Location location) {
}
});
myLocation = HomeScreen.getLocationManager().getLastKnownLocation(
LocationManager.NETWORK_PROVIDER);
if (myLocation != null)
onLocationChanged(myLocation);
else {
God.notifications.setSpeedNotification();
}
} else
Log.e("Taxeeta:PullPendingRequets", "Not activated");
}
@Override
public void onLocationChanged(final Location location) {
// Do your background stuff
}
}
Por último, no se olvide de su cosa manifiesta.
<service
android:name="com.taxeeta.UpdateCustomerRequests"
android:enabled="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Light.NoTitleBar" />
<receiver
android:name="com.taxeeta.support.OnAlarmReceiver"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.NOTIFY" />
</intent-filter>
</receiver>
<receiver
android:name="com.taxeeta.HomeScreen$ResponseReceiver"
android:exported="true" >
<intent-filter>
<action android:name="com.taxeeta.intent.action.GET_SCREEN_UPDATES" />
</intent-filter>
</receiver>
¿Qué es la clase de HomeScreen? – ChArAnJiT
- 1. Cómo ejecutar actividad en segundo plano en Android
- 2. cómo ejecutar la aplicación en segundo plano en android?
- 3. ¿Cómo ejecutar una aplicación de Android en segundo plano?
- 4. Ejecutar tarea en segundo plano en JavaFX
- 5. cómo ejecutar mi aplicación en segundo plano en iphone?
- 6. Android - Ejecutar en segundo plano - Servicio vs. clase Java estándar
- 7. ejecutar archivo bat en segundo plano
- 8. php ejecutar un proceso en segundo plano
- 9. ¿Cómo ejecutar siempre un servicio en segundo plano?
- 10. ¿Cómo ejecutar programas de Python en segundo plano?
- 11. ¿Cómo ejecutar una secuencia de comandos python en segundo plano?
- 12. nohup: ejecutar el proceso de PHP en segundo plano
- 13. Cómo ejecutar una aplicación de consola .NET en segundo plano
- 14. El servicio en segundo plano necesita enviar la ubicación del GPS en el servidor
- 15. ¿Cómo iniciar y ejecutar un script externo en segundo plano?
- 16. ¿Es posible ejecutar el acelerómetro del iPhone en segundo plano?
- 17. ¿Cómo se obtiene Cloud9 IDE para ejecutar en segundo plano?
- 18. Ruby on Rails: ¿Cómo ejecutar cosas en segundo plano?
- 19. ¿Cómo ejecutar gdb contra un daemon en segundo plano?
- 20. formas de llevar una aplicación para Android en segundo plano a plano
- 21. iOS procesado en segundo plano
- 22. ¿Cómo Nike + GPS en iPhone recibe actualizaciones de acelerómetro en segundo plano?
- 23. Trabajo en segundo plano en Powershell
- 24. cómo ejecutar la aplicación android phonegap en segundo plano (después de cerrar la aplicación)?
- 25. Depurando tareas en segundo plano
- 26. Inicio de servicio en segundo plano cuando Android enciende
- 27. Aplicación en segundo plano sin ui
- 28. android - use la cámara desde el servicio en segundo plano
- 29. android: ejecutando una tarea en segundo plano usando AlarmManager
- 30. Implementaciones de InputStream en segundo plano almacenadas
Gracias, pero este código es para la actividad, ¿cómo puedo utilizar el servicio. – Dev