¿Cómo la aplicación OLA habilita el GPS automáticamente sin ir a la página de configuración del dispositivo y recuperar su ubicación tan rápido para una aplicación de Android?

El punto de entrada principal para interactuar con las API de habilitación de configuración de ubicación.

Esta API facilita que una aplicación se asegure de que la configuración del sistema del dispositivo esté configurada correctamente para las necesidades de ubicación de la aplicación.

Al realizar una solicitud a los servicios de ubicación, la configuración del sistema del dispositivo puede estar en un estado que impide que una aplicación obtenga los datos de ubicación que necesita. Por ejemplo, el escaneo GPS o Wi-Fi puede estar desactivado. Esta intención hace que sea fácil:

  • Determine si las configuraciones relevantes del sistema están habilitadas en el dispositivo para llevar a cabo la solicitud de ubicación deseada.
  • Opcionalmente, invoque un cuadro de diálogo que permita al usuario habilitar la configuración de ubicación necesaria con un solo toque.

Para usar esta API, primero cree un GoogleApiClient que admita al menos LocationServices.API. Luego, conecta el cliente a los servicios de Google Play:

mGoogleApiClient = nuevo GoogleApiClient.Builder (contexto)
.addApi (LocationServices.API)
.addConnectionCallbacks (esto)
.addOnConnectionFailedListener (esto)
.construir()

mGoogleApiClient.connect ();

Luego cree un LocationSettingsRequest.Builder y agregue todas las LocationRequests que la aplicación usará:

LocationSettingsRequest.Builder builder = nuevo LocationSettingsRequest.Builder ()
.addLocationRequest (mLocationRequestHighAccuracy)
.addLocationRequest (mLocationRequestBalancedPowerAccuracy);

Si el cliente está usando escaneos BLE para derivar la ubicación, puede solicitar que se habilite BLE llamando a setNeedBle (boolean):

builder.setNeedBle (verdadero);

Luego verifique si la configuración de ubicación actual se cumple:

PendingResult result =
LocationServices.SettingsApi.checkLocationSettings (mGoogleClient, builder.build ());

Cuando PendingResult regresa, el cliente puede verificar la configuración de ubicación mirando el código de estado del objeto LocationSettingsResult. El cliente también puede recuperar el estado actual de la configuración de ubicación relevante llamando a getLocationSettingsStates ():

result.setResultCallback (nuevo ResultCallback () {
@Anular
public void onResult (resultado de LocationSettingsResult) {
estado final status = result.getStatus ();
final LocationSettingsStates = result.getLocationSettingsStates ();
switch (status.getStatusCode ()) {
case LocationSettingsStatusCodes.SUCCESS:
// Se cumplen todas las configuraciones de ubicación. El cliente puede inicializar la ubicación.
// solicita aquí.

descanso;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// La configuración de ubicación no está satisfecha. Pero podría solucionarse mostrando al usuario
// un diálogo.
tratar {
// Muestra el diálogo llamando a startResolutionForResult (),
// y verifica el resultado en onActivityResult ().
status.startResolutionForResult (
OuterClass.this,
REQUEST_CHECK_SETTINGS);
} catch (SendIntentException e) {
// Ignora el error.
}
descanso;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// La configuración de ubicación no está satisfecha. Sin embargo, no tenemos forma de arreglar el
// configuración por lo que no mostraremos el diálogo.

descanso;
}
}
});

Si el código de estado es RESOLUTION_REQUIRED, el cliente puede llamar a startResolutionForResult (Activity, int) para que aparezca un cuadro de diálogo, solicitando permiso del usuario para modificar la configuración de ubicación para satisfacer esas solicitudes. El resultado del diálogo se devolverá a través de onActivityResult (int, int, Intent). Si el cliente está interesado en qué proveedores de ubicación están disponibles, puede recuperar un LocationSettingsStates del Intent llamando al Intent (Intent):

@Anular
void protegido en OnActivityResult (int requestCode, int resultCode, Intent data) {
estados finales de LocationSettingsStates = LocationSettingsStates.fromIntent (intento);
switch (requestCode) {
caso REQUEST_CHECK_SETTINGS:
switch (resultCode) {
Caso Actividad.RESULT_OK:
// Todos los cambios requeridos se realizaron con éxito

descanso;
Case Activity.RESULT_CANCELED:
// Se le pidió al usuario que cambiara la configuración, pero decidió no hacerlo

descanso;
defecto:
descanso;
}
descanso;
}
}

Resumen de método público

abstract PendingResult

checkLocationSettings (cliente GoogleApiClient, LocationSettingsRequestlocationSettingsRequest)

Fuente: SettingsApi | API de Google para Android
El | Desarrolladores de Google

La aplicación OLA lo hace usando su propia lógica, pero aquí le daré una lógica que también puede hacer lo mismo para su aplicación. Veamos algunos pasos básicos:

Guía breve de cómo usarlo:

  1. Añádelo a tu archivo build.gradle: compila ‘net.alexandroid.utils: gps: 1.6’
  2. Implemente la interfaz GpsStatusDetectorCallBack.
  3. Implemente métodos de interfaz : onGpsSettingStatus y onGpsAlertCanceledByUser
  4. Crear variable de instancia: privado GpsStatusDetector mGpsStatusDetector;
  5. Instanciarlo en onCreate (): mGpsStatusDetector = new GpsStatusDetector (this);
  6. En su lugar, debe verificar el estado y mostrar un cuadro de diálogo si es necesario agregar : mGpsStatusDetector.checkLocationSettingStatus ();
  7. Anule onActivityResult y agregue allí: mGpsStatusDetector.checkOnActivityResult (requestCode, resultCode);

Ahora vaya a esta página y siga los pasos para tener una idea clara de la lógica. Una vez que esté claro, intente lo mismo con su aplicación. Si tiene algún problema, regrese, nuestro equipo tratará de resolverlo.

Fuente de y seguir esta URL: Active el GPS mediante programación como la aplicación de Android Ola Cabs

Pocas líneas de código y esto hará lo mismo como OLA o Google Maps

Puede seguir este androidneha / Automáticamente-Encender-Apagar-Gps O

importar android.content.Context;
importar android.content.IntentSender;
importar android.location.LocationManager;
importar android.os.Bundle;
importar android.support.v7.app.AppCompatActivity;
importar android.util.Log;
importar android.widget.Button;
importar android.widget.TextView;
importar android.widget.Toast;

importar com.google.android.gms.common.ConnectionResult;
importar com.google.android.gms.common.api.GoogleApiClient;
importar com.google.android.gms.common.api.PendingResult;
importar com.google.android.gms.common.api.ResultCallback;
importar com.google.android.gms.common.api.Status;
importar com.google.android.gms.location.LocationRequest;
importar com.google.android.gms.location.LocationServices;
importar com.google.android.gms.location.LocationSettingsRequest;
importar com.google.android.gms.location.LocationSettingsResult;
importar com.google.android.gms.location.LocationSettingsStatusCodes;

import java.util.List;

public class LocationOnOff_Similar_To_Google_Maps extiende AppCompatActivity {

estático protegido String TAG = “LocationOnOff”;

GoogleApiClient privado googleApiClient;
final static int REQUEST_LOCATION = 199;

@Anular
vacío protegido onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);

this.setFinishOnTouchOutside (verdadero);

// Todo Ubicación Ya en … inicio
gerente final de LocationManager = (LocationManager) LocationOnOff_Similar_To_Google_Maps.this.getSystemService (Context.LOCATION_SERVICE);
if (manager.isProviderEnabled (LocationManager.GPS_PROVIDER) && hasGPSDevice (LocationOnOff_Similar_To_Google_Maps.this)) {
Toast.makeText (LocationOnOff_Similar_To_Google_Maps.this, “Gps ya habilitado”, Toast.LENGTH_SHORT) .show ();
terminar();
}
// Todo la ubicación ya está en … final

if (! hasGPSDevice (LocationOnOff_Similar_To_Google_Maps.this)) {
Toast.makeText (LocationOnOff_Similar_To_Google_Maps.this, “Gps no admitidos”, Toast.LENGTH_SHORT) .show ();
}

if (! manager.isProviderEnabled (LocationManager.GPS_PROVIDER) && hasGPSDevice (LocationOnOff_Similar_To_Google_Maps.this)) {
Log.e (“Neha”, “Gps ya habilitado”);
Toast.makeText (LocationOnOff_Similar_To_Google_Maps.this, “Gps no habilitados”, Toast.LENGTH_SHORT) .show ();
enableLoc ();
}más{
Log.e (“Neha”, “Gps ya habilitado”);
Toast.makeText (LocationOnOff_Similar_To_Google_Maps.this, “Gps ya habilitado”, Toast.LENGTH_SHORT) .show ();
}
}

hasGPSDevice booleano privado (contexto de contexto) {
LocationManager final mgr = (LocationManager) contexto
.getSystemService (Context.LOCATION_SERVICE);
si (mgr == nulo)
falso retorno;
Lista final proveedores = mgr.getAllProviders ();
if (proveedores == nulo)
falso retorno;
devolver proveedores.contains (LocationManager.GPS_PROVIDER);
}

private void enableLoc () {

if (googleApiClient == null) {
googleApiClient = new GoogleApiClient.Builder (LocationOnOff_Similar_To_Google_Maps.this)
.addApi (LocationServices.API)
.addConnectionCallbacks (nuevo GoogleApiClient.ConnectionCallbacks () {
@Anular
public void onConnected (paquete de paquetes) {

}

@Anular
public void onConnectionSuspended (int i) {
googleApiClient.connect ();
}
})
.addOnConnectionFailedListener (nuevo GoogleApiClient.OnConnectionFailedListener () {
@Anular
public void onConnectionFailed (ConnectionResult connectionResult) {

Log.d (“Error de ubicación”, “Error de ubicación” + connectionResult.getErrorCode ());
}
}).construir();
googleApiClient.connect ();

LocationRequest locationRequest = LocationRequest.create ();
locationRequest.setPriority (LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval (30 * 1000);
locationRequest.setFastestInterval (5 * 1000);
LocationSettingsRequest.Builder builder = nuevo LocationSettingsRequest.Builder ()
.addLocationRequest (locationRequest);

builder.setAlwaysShow (true);

PendingResult result =
LocationServices.SettingsApi.checkLocationSettings (googleApiClient, builder.build ());
result.setResultCallback (nuevo ResultCallback
() {
@Anular
public void onResult (resultado de LocationSettingsResult) {
estado final status = result.getStatus ();
switch (status.getStatusCode ()) {
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
tratar {
// Muestra el diálogo llamando a startResolutionForResult (),
// y verifica el resultado en onActivityResult ().
status.startResolutionForResult (LocationOnOff_Similar_To_Google_Maps.this, REQUEST_LOCATION);

terminar();
} catch (IntentSender.SendIntentException e) {
// Ignora el error.
}
descanso;
}
}
});
}
}

}

Si ya inició sesión en su teléfono con su cuenta de Google, incluido Google Maps, las API de Google tienen la funcionalidad de recordar su ubicación incluso cuando no está conectado. Si nota que generalmente no requiere GPS para conocer su ubicación actual cuando abre Google Maps, porque Google rastrea su teléfono en segundo plano, pero esto solo es posible con una conexión a Internet de alta velocidad. Realmente no necesitas activar tu GPS para navegar por lugares que normalmente no hago. Del mismo modo, OLA utiliza las API de Google que están disponibles para usar para rastrear a sus usuarios.

Ola Cabs está utilizando la API de configuración recientemente lanzada para lograr esta funcionalidad. Según la nueva API, no se requiere que el usuario navegue a la página de configuración para habilitar los servicios de ubicación que brindan una integración perfecta para el mismo. Por favor lea a continuación para más detalles:

SettingsApi

Podrían estar explotando un error en Android. Leer aquí.

Tal vez estoy un poco tarde

He respondido en stackoverflow para esta pregunta, aquí está el enlace para activar el GPS mediante programación como la aplicación de Android Ola Cabs. Échale un vistazo.

Ninguna aplicación puede hacerlo directamente a menos que la configuración predeterminada sea de alta precisión. Al igual que esas aplicaciones, Ola también le pide que cambie a configuraciones de alta precisión para la ubicación

Creo que han codificado el dispositivo y han realizado algunos cambios en el sistema operativo y es por eso que OLA puede habilitar fácilmente el GPS automáticamente y eso es muy rápido para las aplicaciones de Android

More Interesting

¿Qué es una alternativa a Lucky Patcher para el sistema operativo Android?

Android (sistema operativo): ¿Qué tan difícil sería iniciar una compañía de teléfonos inteligentes que diseñe teléfonos que ejecuten Android? ¿Y cuáles son los posibles pasos?

¿Puedo usar la aplicación Remota con un teléfono que no sea un teléfono inteligente?

¿Cuáles son las ventajas de jugar un juego en un Chromebook sobre una plataforma Android, Mac o Windows?

¿Cuál es la mejor aplicación de Android para aprender el idioma alemán?

¿Cuál es el futuro del desarrollo de Android? Si Android sale del mercado, ¿cuál es el futuro de los desarrolladores de Android?

Entre iOS y Android, ¿cuál experimenta más spam?

¿Es realmente necesaria una aplicación de seguridad como Lookout para un teléfono Android?

Algunas aplicaciones se cierran repentinamente cuando se abren en Android. ¿Cuál es el problema y cómo resuelvo esto?

¿Qué es la aplicación SmartCity-311 y cómo es útil para los municipios?

¿Cuál es la mejor puerta de enlace de SMS disponible para la validación del número de teléfono móvil usando la aplicación de Android y SMS masivos, especialmente en India?

¿Cuáles son algunos entretenidos juegos de Android?

¿Cuál es la mejor aplicación de Android para recordatorios diarios?

¿Cuál es el mejor nombre de aplicación científica para Android?

Soy desarrollador de Android y no puedo escribir códigos eficientes sin fumar marihuana. ¿Esta bien?