Ubicación de Android GPS periódicamente

Quiero crear una aplicación que busque la ubicación del usuario cada 5 minutos entre las 9:00 AM y las 9:00 PM. Ahora no soy capaz de pensar el flujo. Estoy confundido en :

  1. ¿Debo implementar 2 encargados de alarma de repetición, uno para cada 5 min y otro para la ranura de tiempo. ?
  2. O hacerlo de una manera, la alarma de incendio cada 5 min y comprobar si está entre la ranura de tiempo, entonces sólo ejecutar servicio de ubicación y cargar a servidor de trabajo. ?

Por favor, ayúdenme con sugerencias y consejos. Cómo lograr esto en el mejor enfoque en términos de batería del teléfono, la eficiencia.

Bueno, puede utilizar el controlador para consultar la ubicación, puede hacer algo como esto

Handler handler = new Handler(); Runnable runnable = new Runnable() { public void run() { currentLocation = getCurrentUserLocation(); handler.postDelayed(this, 1000*60*5); } } }; handler.postDelayed(runnable, 1000*60*5); 

Y para comprobar el intervalo de tiempo es entre, puede configurar un administrador de alarmas para esta tarea,

Y una vez que se alcance el límite de tiempo, debe eliminar las devoluciones de llamada del manejador por

 handleLocation.removeCallbacksAndMessages(null); 

No debe utilizar Handler.postDelayer () para intervalos de tiempo, más largo que 30seg, porque puede causar pérdidas de memoria. Desarrollar un par de estrategias – una para intervalos de tiempo cortos – menos de 30 segundos, que utilizan Handler y otro – con AlarmManager (para intervalos más largos).

Consulte https://codelabs.developers.google.com/codelabs/background-location-updates-android-o/index.html?index=..%2F..%2Findex#0

Usted puede fijar el intervalo de la actualización como 5 minutos en request.it de la localización es compatible con Android "O" también.

Aquí he creado un servicio que da la localización actual en el intervalo de 1 Minute.You puede modificarlo según su requisito-

También agregue esto en gradle file-

 compile 'com.google.android.gms:play-services:9.4.0' 

LocationService.class

 import android.Manifest; import android.app.Service; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Location; import android.os.Bundle; import android.os.IBinder; import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.util.Log; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import java.text.SimpleDateFormat; import java.util.Date; public class LocationService extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener, ActivityCompat.OnRequestPermissionsResultCallback { protected static final String TAG = "location-updates"; private static final long day = 24 * 60 * 60 * 1000; private static final long hours = 60 * 60 * 1000; private static final long minute = 60 * 1000; private static final long fiveSec = 5 * 1000; private GoogleApiClient mGoogleApiClient; private LocationRequest mLocationRequest; @Override public void onCreate() { super.onCreate(); mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext()) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(minute); mLocationRequest.setFastestInterval(5000); mLocationRequest.setSmallestDisplacement(0); mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); if (mGoogleApiClient != null) { mGoogleApiClient.connect(); } } @Override public void onConnected(Bundle bundle) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } @Override public void onConnectionSuspended(int i) { mGoogleApiClient.connect(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } //Location Listener @Override public void onLocationChanged(final Location location) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); String currentDateandTime = sdf.format(new Date()); Log.e("Location ", location.getLatitude() + " " + location.getLongitude() + " " + currentDateandTime); } @Override public void onDestroy() { super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); return START_STICKY; } @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { boolean isGranted = false; for (int i = 0; i < grantResults.length; i++) if (permissions[i].equals(Manifest.permission.ACCESS_FINE_LOCATION) && (grantResults[i] == PackageManager.PERMISSION_GRANTED)) isGranted = true; if (isGranted) { startService(new Intent(this, LocationService.class)); } else { } } } 
  • Mi algoritmo para calcular la posición del teléfono inteligente - GPS y sensores
  • Android - cómo obtener la ubicación del amigo
  • Android: recibe notificación cuando el usuario ingresa en una ubicación específica
  • ¿Cuáles son los criterios de mayor exactitud: ACCURACY_HIGH o ACCURACY_FINE?
  • Obtener la dirección de ubicación actual de la aplicación de Android
  • Android mejor manera de obtener la ubicación repetidamente en el fondo considerando la batería así
  • ¿Cómo registrar Geofence después de reiniciar el dispositivo?
  • Enviar ubicación actual al servidor periódicamente en android
  • ¿Cómo es posible que la aplicación Google Fit mide el número de pasos todo el tiempo sin drenar la batería?
  • No se puede resolver el símbolo ACCESS_FINE_LOCATION
  • Android: Obtener una posición GPS rápidamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.