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 .

¿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.

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) { } }; 
  • ¿Cómo puedo obtener el estado del arreglo GPS en android? Ahora mismo (no usar el oyente)
  • Android: recibe notificación cuando el usuario ingresa en una ubicación específica
  • Tiempo de sincronización para la grabación de datos en varios dispositivos Android
  • Número GPS de satélites y filtrado de ubicaciones
  • Android: Samsung Galaxy Tabs y dispositivos Android 2.2 Mostrando fecha GPS 1 día adelantado desde el 1 de enero 2012
  • Servicios de Google Play o Servicios de ubicación de Android
  • Android - ¿Hay una manera de escuchar si el GPS fue activado o desactivado
  • Cómo obtener el nombre de la ciudad por latitud y longitud en android?
  • Android: cómo arreglar gps con simulacros (falso) de coordenadas?
  • Cómo mostrar el diálogo de configuración de ubicación en android?
  • ¿Cómo enviar mi ubicación GPS (latitud, longitud) en una cadena de consulta?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.