waze ubicacion uber predeterminado poner google fake establecer como activar abrir abre android gps action android-alertdialog

ubicacion - Utilice el cuadro de diálogo GPS ON-OFF predeterminado de Android en Mi aplicación



fake gps android 7 (4)

Necesitas usar la última versión del servicio Google Play. la última versión tiene un diálogo para activar todas las cosas necesarias para obtener el GPS.

Desde la documentación de Android Developer Play Service,

Configuración de ubicación: mientras que FusedLocationProviderApi combina varios sensores para brindarle la ubicación óptima, la precisión de la ubicación que recibe su aplicación aún depende en gran medida de la configuración habilitada en el dispositivo (GPS, wifi, modo avión y otros). Con la nueva clase de SettingsApi, puede abrir un cuadro de diálogo Configuración de ubicación que muestra un control de un toque para que los usuarios cambien sus configuraciones sin salir de su aplicación.

Link directo a la documentación de la versión de Play Service. La versión 7.0 ha introducido este nuevo mensaje.

En nuestra aplicación queremos integrar el Diálogo GPS predeterminado de Android. El mismo cuadro de diálogo que aparece cuando el GPS está apagado y presionamos el botón de mi ubicación en las aplicaciones de Google Maps. También he adjuntado la imagen del diálogo que quiero integrar.

  1. Al hacer clic en la opción "No" se cerrará el diálogo.
  2. Al hacer clic en "Sí", la opción Activará el GPS del dispositivo directamente.

Aparece el cuadro de diálogo Aparece para la aplicación OLA a continuación (ANDROID L):

Aparece el cuadro de diálogo para la aplicación OLA a continuación (ANDROID KIT_KAT):

Aparece el diálogo para el Mapa de Google de abajo (ANDROID L):

Nuestra implementación actual es cuando el GPS está apagado, estamos redirigiendo la aplicación a la pantalla de configuración de ubicación predeterminada del dispositivo desde donde él / ella puede ENCENDER la ubicación.

Esperando respuestas. Gracias por adelantado.


Ola Cabs está utilizando la API de configuración recientemente lanzada para lograr esta funcionalidad. Según la nueva API, el usuario no está obligado a navegar a la página de configuración para habilitar los servicios de ubicación, lo que brinda una integración perfecta para la misma. Por favor, lea developers.google.com/android/reference/com/google/android/gms/… para más detalles.


Paso a paso

Paso 1 comprueba el soporte de hasGPSDevice o no

Paso 2 hasGPSDevice true check MarshMallow Permimssion

Paso 3 MarshMallow Permimssion true check Ubicación ya activada o no

Paso 4: si la ubicación está activada, coloque el Rastreador de GPS y obtenga Lat Long

Paso 5: si la ubicación es correcta, entonces, coloque el cuadro de diálogo de ubicación igual que en Google Maps

Código fuente

https://drive.google.com/open?id=0BzBKpZ4nzNzUMnVLTGpWcTk2QUE

Añadir dependencia y permiso de Internet

compile ''com.google.android.gms: play-services-location: 8.4.0''

package com.keshav.locationenabledorcancelwithoutoutsideclick; import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.content.pm.PackageManager; import android.location.Address; import android.location.Geocoder; import android.location.LocationManager; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.PendingResult; import com.google.android.gms.common.api.Result; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import com.google.android.gms.location.LocationSettingsRequest; import com.google.android.gms.location.LocationSettingsStatusCodes; import com.keshav.locationenabledorcancelwithoutoutsideclick.gps.GPSTracker; import java.io.IOException; import java.util.List; import java.util.Locale; public class LocSettingsActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ResultCallback { protected GoogleApiClient mGoogleApiClient; protected LocationRequest locationRequest; int REQUEST_CHECK_SETTINGS = 100; GPSTracker gps; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Step 1 checkPermission(); } @Override public void onConnected(@Nullable Bundle bundle) { LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest); builder.setAlwaysShow(true); PendingResult result = LocationServices.SettingsApi.checkLocationSettings( mGoogleApiClient, builder.build() ); result.setResultCallback(this); } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { } @Override // public void onResult(@NonNull LocationSettingsResult locationSettingsResult) { public void onResult(@NonNull Result locationSettingsResult) { final Status status = locationSettingsResult.getStatus(); switch (status.getStatusCode()) { case LocationSettingsStatusCodes.SUCCESS: // NO need to show the dialog; break; case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: // Location settings are not satisfied. Show the user a dialog try { // Show the dialog by calling startResolutionForResult(), and check the result // in onActivityResult(). status.startResolutionForResult(LocSettingsActivity.this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException e) { //failed to show } break; case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: // Location settings are unavailable so not possible to show any dialog now break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CHECK_SETTINGS) { if (resultCode == RESULT_OK) { Toast.makeText(getApplicationContext(), "GPS enabled", Toast.LENGTH_LONG).show(); Log.e("Keshav", "..........GPS enabled.............."); //TODO Important When Gps Enable Just Now Need Some Time ..........otherwise lat long 0.0 fetch // TODO Need Some time to call GPS Tracker Service new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); //Todo dummy delay for 2 second } catch (InterruptedException e) { e.printStackTrace(); } //update ui on UI thread runOnUiThread(new Runnable() { @Override public void run() { callLocationGpsTracker(); } }); } }).start(); } else { callLocationDialog(); Log.e("Keshav", "..........GPS not enabled.............."); Toast.makeText(getApplicationContext(), "GPS is not enabled", Toast.LENGTH_LONG).show(); } } } @Override public void onPointerCaptureChanged(boolean hasCapture) { } private void checkPermission(){ if (!hasGPSDevice(LocSettingsActivity.this)) { Log.e("keshav", "Gps not Supported"); Toast.makeText(LocSettingsActivity.this, "Gps not Supported", Toast.LENGTH_SHORT).show(); } else { Log.e("keshav", "Gps Supported ---hasGPSDevice return true--Step 1 Pass..........."); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int permissionCheck = ContextCompat.checkSelfPermission(LocSettingsActivity.this, Manifest.permission.CAMERA); if (permissionCheck == PackageManager.PERMISSION_GRANTED) { Log.e("permission", "granted"); locationEnabled_or_Not(); } else { ActivityCompat.requestPermissions(LocSettingsActivity.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,}, 1); } } else { Log.e("MainActivity", "Lower Than MarshMallow"); locationEnabled_or_Not(); } } } //TODO Step 1 public boolean hasGPSDevice(Context context) { final LocationManager mgr = (LocationManager) context .getSystemService(Context.LOCATION_SERVICE); if (mgr == null) return false; final List<String> providers = mgr.getAllProviders(); if (providers == null) return false; return providers.contains(LocationManager.GPS_PROVIDER); } //TODO Step 2 // TODO When Location not enabled show popup // TODO When Location already Enabled CAll GPS Tracker private void locationEnabled_or_Not() { Log.e("keshav", "locationEnabled_or_Not Step 2 Pass..........."); final LocationManager manager = (LocationManager) LocSettingsActivity.this.getSystemService(Context.LOCATION_SERVICE); if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(LocSettingsActivity.this)) { Log.e("keshav", "Gps not enabled"); callLocationDialog(); } else { Log.e("keshav", "Gps already enabled"); callLocationGpsTracker(); // TODO When Gps already enabled call direct GPS Tracker } } //TODO Step 3 when hasGPSDevice return true private void callLocationDialog() { Log.e("keshav", "callLocationDialog Step 3 Popup called ..........."); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this).build(); mGoogleApiClient.connect(); locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(30 * 1000); locationRequest.setFastestInterval(5 * 1000); } //TODO Step 4 when location on fetch GPS Tracker Through Latitude Longitude private void callLocationGpsTracker() { Log.e("keshav", "callLocationGpsTracker Step 4 Called ... fetch Location"); gps = new GPSTracker(LocSettingsActivity.this); // check if GPS enabled if (gps.canGetLocation()) { double latitude = gps.getLatitude(); double longitude = gps.getLongitude(); Log.e("MainActivity", "latitude -> " + latitude); Log.e("MainActivity", "longitude -> " + longitude); getAddress(latitude, longitude); // LocationAddress locationAddress = new LocationAddress(); // locationAddress.getAddressFromLocation(latitude, longitude, // getApplicationContext(), new GeocoderHandler()); } else { // TODO can''t get location // TODO GPS or Network is not enabled // TODO Ask user to enable GPS/network in settings //TODO need again call Locaton Dialog callLocationDialog(); } } private void getAddress(double lat, double lon) { String cityName = ""; String stateName = ""; String postalCode = ""; String countryName = ""; StringBuilder finalAddress = new StringBuilder(); try { Geocoder geocoder = new Geocoder(LocSettingsActivity.this, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(lat, lon, 1); if (addresses != null) { try { cityName = addresses.get(0).getLocality(); stateName = addresses.get(0).getAdminArea(); countryName = addresses.get(0).getCountryName(); postalCode = addresses.get(0).getPostalCode(); if (addresses.get(0).getAddressLine(0) != null) finalAddress.append(addresses.get(0).getAddressLine(0)); if (addresses.get(0).getAddressLine(1) != null) finalAddress.append(" " + addresses.get(0).getAddressLine(1)); if (addresses.get(0).getAddressLine(2) != null) finalAddress.append(" " + addresses.get(0).getAddressLine(2)); if (addresses.get(0).getAddressLine(3) != null) finalAddress.append(" " + addresses.get(0).getAddressLine(3)); Log.e("keshav", "addres 0 -> " + addresses.get(0).getAddressLine(0)); Log.e("keshav", "addres 1 -> " + addresses.get(0).getAddressLine(1)); Log.e("keshav", "addres 2 -> " + addresses.get(0).getAddressLine(2)); Log.e("keshav", "addres 3 -> " + addresses.get(0).getAddressLine(3)); Log.e("keshav", "addres final -> " + finalAddress); } catch (Exception e) { Log.e("keshav", "Exception occurd -> " + e.getMessage()); e.printStackTrace(); } Log.e("keshav", "cityName -> " + cityName); Log.e("keshav", "stateName -> " + stateName); Log.e("keshav", "countryName -> " + countryName); Log.e("keshav", "PostalCode -> " + postalCode); } } catch (IOException e) { e.printStackTrace(); } } @Override protected void onResume() { super.onResume(); checkPermission(); } } ===============================GPSTracker=================================== package com.keshav.locationenabledorcancelwithoutoutsideclick.gps; import android.app.AlertDialog; import android.app.Service; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.os.IBinder; import android.provider.Settings; import android.util.Log; public class GPSTracker extends Service implements LocationListener { private final Context mContext; // flag for GPS status boolean isGPSEnabled = false; // flag for network status boolean isNetworkEnabled = false; // flag for GPS status boolean canGetLocation = false; Location location; // location double latitude; // latitude double longitude; // longitude // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters // The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute // Declaring a Location Manager protected LocationManager locationManager; public GPSTracker(Context context) { this.mContext = context; getLocation(); } public Location getLocation() { try { locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); // getting GPS status isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (!isGPSEnabled && !isNetworkEnabled) { // no network provider is enabled } else { this.canGetLocation = true; // First get location from Network Provider if (isNetworkEnabled) { locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("Network", "Network"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } // if GPS Enabled get lat/long using GPS Services if (isGPSEnabled) { if (location == null) { locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("GPS Enabled", "GPS Enabled"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } } } } catch (Exception e) { e.printStackTrace(); } return location; } /** * Stop using GPS listener * Calling this function will stop using GPS in your app */ public void stopUsingGPS() { if (locationManager != null) { locationManager.removeUpdates(GPSTracker.this); } } /** * Function to get latitude */ public double getLatitude() { if (location != null) { latitude = location.getLatitude(); } // return latitude return latitude; } /** * Function to get longitude */ public double getLongitude() { if (location != null) { longitude = location.getLongitude(); } // return longitude return longitude; } /** * Function to check GPS/wifi enabled * * @return boolean */ public boolean canGetLocation() { return this.canGetLocation; } /** * Function to show settings alert dialog * On pressing Settings button will lauch Settings Options */ public void showSettingsAlert() { AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); // Setting Dialog Title alertDialog.setTitle("GPS is settings"); // Setting Dialog Message alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); // On pressing Settings button alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); mContext.startActivity(intent); } }); // on pressing cancel button alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } @Override public void onLocationChanged(Location location) { } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public IBinder onBind(Intent arg0) { return null; } }

Código fuente

https://drive.google.com/open?id=0BzBKpZ4nzNzUMnVLTGpWcTk2QUE


import android.content.Intent; import android.content.IntentSender; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.PendingResult; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import com.google.android.gms.location.LocationSettingsRequest; import com.google.android.gms.location.LocationSettingsResult; import com.google.android.gms.location.LocationSettingsStatusCodes; public class LocSettingsActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ResultCallback { protected GoogleApiClient mGoogleApiClient; protected LocationRequest locationRequest; int REQUEST_CHECK_SETTINGS = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_loc_settings); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this).build(); mGoogleApiClient.connect(); locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(30 * 1000); locationRequest.setFastestInterval(5 * 1000); } @Override public void onConnected(@Nullable Bundle bundle) { LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest); builder.setAlwaysShow(true); PendingResult result = LocationServices.SettingsApi.checkLocationSettings( mGoogleApiClient, builder.build() ); result.setResultCallback(this); } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { } @Override public void onResult(@NonNull LocationSettingsResult locationSettingsResult) { final Status status = locationSettingsResult.getStatus(); switch (status.getStatusCode()) { case LocationSettingsStatusCodes.SUCCESS: // NO need to show the dialog; break; case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: // Location settings are not satisfied. Show the user a dialog try { // Show the dialog by calling startResolutionForResult(), and check the result // in onActivityResult(). status.startResolutionForResult(LocSettingsActivity.this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException e) { //failed to show } break; case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: // Location settings are unavailable so not possible to show any dialog now break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CHECK_SETTINGS) { if (resultCode == RESULT_OK) { Toast.makeText(getApplicationContext(), "GPS enabled", Toast.LENGTH_LONG).show(); } else { Toast.makeText(getApplicationContext(), "GPS is not enabled", Toast.LENGTH_LONG).show(); } } } }

dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) compile ''com.android.support:appcompat-v7:23.0.1'' compile ''com.google.android.gms:play-services-location:8.4.0'' }