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 :
- ¿Debo implementar 2 encargados de alarma de repetición, uno para cada 5 min y otro para la ranura de tiempo. ?
- 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.
- ¿Cómo puedo obtener la ubicación GPS actual?
- Redirigir a la configuración de ubicación utilizando cordova en android
- Android "gps requiere ACCESS_FINE_LOCATION" error, aunque mi archivo de manifiesto contiene este
- Cómo habilitar GPS en Eclipse Emulator para Android
- No hay actualizaciones de ubicación GPS en el Galaxy S3
- Cómo encontrar el código postal por latitud y logitud para el Reino Unido
- OnStatusChanged situaciones
- Calcular la velocidad de una aplicación de navegación sin el método getSpeed ()
- No puede encontrar la ubicación exacta actual en android
- Algoritmo de trilateración multipunto en Java
- Android Google Map cómo comprobar si la ubicación del GPS está dentro del círculo
- GPS de seguimiento de Android y WakeLock
- Phonegap Android y satélite GPS
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 { } } }
- Cambiar el color FAB con efecto de ondulación
- Cómo configurar MaxWidth de un cuadro de diálogo Android?