Datos móviles y GPS ON / OFF por programa – Android por encima de 5.0 también
Quiero implementar Enable/Disable mobile data and GPS settings
. He buscado la API disponible de Android para activar / desactivar los datos móviles y los ajustes de GPS y, a continuación, mis hallazgos.
Activar / Desactivar datos móviles – 1. Es posible realizar la activación / desactivación en <OS Android 5.0. 2. Desde el sistema operativo Android 5.0+, aún no es posible que una aplicación que no sea del sistema active / desactive los datos móviles. A partir de 5.0 o superior obtendremos esta excepción al mismo tiempo, que no es para uso de aplicaciones de terceros. Causado por: java.lang.SecurityException:
Neither user 10314 nor current process has android.permission.MODIFY_PHONE_STATE
.
- ¿Es posible obtener la máxima precisión GPS en el navegador móvil?
- Sigo obteniendo una ubicación incorrecta en Android
- Que es la mejor manera de calcular la velocidad en android si "cálculo manual utilizando coordenadas GPS" o "location.getSpeed"?
- Ejecutar Gps como servicio de fondo y enviar coordenadas al servidor web (PHP)
- Permisos de tiempo de ejecución de Android en las versiones de android debajo de M?
¿Hay alguna solución posible disponible disponible?
Ajustes del GPS – 1. Podemos a la localización del ON programmatically pero todavía no encontramos una manera de inhabilitarlo (excepto acercamiento de la intención).
Alguien sabe cómo deshabilitar el GPS (ubicación mediante programación) sin pasar a la configuración a través de la intención.
Gracias por adelantado.
- Cómo habilitar el acceso a la ubicación mediante programación en android?
- ¿Es posible encontrar otros teléfonos cercanos?
- Recuperación de # de satélites utilizados en la reparación de gps de Android
- ¿El GPS requiere Internet?
- ACCESS_FINE_LOCATION Permisos de AndroidManifest no concedidos
- Estado del GPS de Android me conduce nueces
- GPS android requestLocationUpdate
- Diferencia entre AsyncTask y Thread / Runnable
Estamos cambiando la configuración de GPS sin pasar a la pantalla de configuración usando SettingsApi
Para comprobar si el GPS está encendido o apagado, usted tiene que comprobar como abajo,
public class GPSActivity extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { private static String TAG = "GPSActivity"; // Required for setting API protected static final int REQUEST_CHECK_SETTINGS = 0x1; GoogleApiClient googleApiClient; private Button mBtnGPS; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gps); mBtnGPS = (Button) findViewById(R.id.btnGPS); mBtnGPS.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btnGPS: // Check GPS checkGps(); break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); if (requestCode == REQUEST_CHECK_SETTINGS) { googleApiClient = null; checkGps(); } } public void checkGps() { if (googleApiClient == null) { googleApiClient = new GoogleApiClient.Builder(GPSActivity.this) .addApiIfAvailable(LocationServices.API) .addConnectionCallbacks(this).addOnConnectionFailedListener(this).build(); googleApiClient.connect(); LocationRequest locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(30 * 1000); locationRequest.setFastestInterval(5 * 1000); LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest); builder.setAlwaysShow(true); // this is the key ingredient PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi .checkLocationSettings(googleApiClient, builder.build()); result.setResultCallback(new ResultCallback<LocationSettingsResult>() { @Override public void onResult(LocationSettingsResult result) { final Status status = result.getStatus(); final LocationSettingsStates state = result .getLocationSettingsStates(); switch (status.getStatusCode()) { case LocationSettingsStatusCodes.SUCCESS: Log.i("GPS", "SUCCESS"); //getFbLogin(); break; case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: Log.i("GPS", "RESOLUTION_REQUIRED"); // Location settings are not satisfied. But could be // fixed by showing the user // a dialog. try { // Show the dialog by calling // startResolutionForResult(), // and check the result in onActivityResult(). status.startResolutionForResult(GPSActivity.this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException e) { // Ignore the error. } break; case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: Log.i("GPS", "SETTINGS_CHANGE_UNAVAILABLE"); // Location settings are not satisfied. However, we have // no way to fix the // settings so we won't show the dialog. break; case LocationSettingsStatusCodes.CANCELED: Log.i("GPS", "CANCELED"); break; } } }); } } @Override public void onConnected(Bundle bundle) { } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(ConnectionResult connectionResult) { }
}
Aquí está la documentación
Así se inicia el servicio de ubicación, desde los proveedores de GPS y de red (Wi-Fi / datos).
LocationManager locationManager = (LocationManager)getContext().getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);
Si desea dejar de escuchar las actualizaciones de ubicación, ejecute este código: locationManager.removeUpdates(locationListener);
La única línea de código dejaría de escuchar las actualizaciones de ubicación, independientemente del proveedor (GPS / Red), ya que LocationManager no importa de dónde vienen las actualizaciones.
En su caso, supongo que usted sabe cómo crear una interfaz de usuario para que el usuario decida si utilizar GPS / Red o no. Y entonces, puedes hacer algo como esto:
if ( useGPS ) { locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); } if ( useNetwork ) { locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener); }
Si el usuario habilitó a ambos proveedores, las actualizaciones de ubicación podrían ser más precisas. Y si el usuario inhabilita a los dos proveedores, no importa. Ya que no hay actualizaciones llegarán a LocationListener, y debería ser lo que el usuario quería.
Por cierto, aquí está el código para crear el LocationListener:
LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { // you may add some logic here to determine whether the new location update is more accurate than the previous one if ( isBetterLocation(location,currentBestLocation) ) { currentBestLocation = location; } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } };
- SlidingUpPanelLayout no se derrumbará al reanudar después de que el sistema operativo destruya mi actividad
- ¿La orientación de Android como dirección – rollo de tono de corrupción?