vuelo suena sirve significa saber recibir reciben que puedo para modo mensajes llamadas esta como celular avion android mode airplane

suena - Alternar modo de avión en Android



que significa modo avion en el celular (10)

¿He cometido un error? No funciona.

public void airplane() { boolean isEnabled = Settings.System.getInt(this.getApplicationContext().getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1; Settings.System.putInt(context.getContentResolver(),Settings.System.AIRPLANE_MODE_ON,isEnabled ? 0 : 1); //Settings.System.putInt(this.getApplicationContext().getContentResolver(),Settings.System.AIRPLANE_MODE_ON,isEnabled ? 0 : 1); Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); }


Funciona para todas las versiones de API.

  • cambiar de forma automática para API <17
  • abrir Actividad predeterminada del modo Avión para acciones del usuario para API> = 17

¡sin root, sin permiso de nivel de sistema !

en AndroidManifest.xml agregar permiso:

<!--airplane mode--> <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

entonces:

@SuppressWarnings("deprecation") private void initAirplanemodeBtn() { airplanemodeButton = (ToggleButton) findViewById(R.id.airplanemode_btn); airplanemodeButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (android.os.Build.VERSION.SDK_INT < 17) { try { // read the airplane mode setting boolean isEnabled = Settings.System.getInt( getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1; // toggle airplane mode Settings.System.putInt( getContentResolver(), Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1); // Post an intent to reload Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", !isEnabled); sendBroadcast(intent); } catch (ActivityNotFoundException e) { Log.e(TAG, e.getMessage()); } } else { try { Intent intent = new Intent(android.provider.Settings.ACTION_AIRPLANE_MODE_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } catch (ActivityNotFoundException e) { try { Intent intent = new Intent("android.settings.WIRELESS_SETTINGS"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } catch (ActivityNotFoundException ex) { Toast.makeText(buttonView.getContext(), R.string.not_able_set_airplane, Toast.LENGTH_SHORT).show(); } } } } }); }


Como @eggyal mencionado alternar modo avión no se puede hacer desde la versión 4.2 y superior.

Pero lo que podemos hacer es activar cada uno de los servicios inalámbricos:

El wifi se puede controlar usando WifiService ~ getSystemService (Context.WIFI_SERVICE). Bluetooth se puede controlar utilizando BluetoothAdapter- getSystemService (Context.BLUETOOTH_SERVICE).

Después de algunas investigaciones, descubrí que al usar Java Reflection todavía se pueden controlar las Radios Android (Wifi, Red, Bluetooth), lo que básicamente hace el Modo Avión es alternar el estado de Bluetooth, Wifi y Redes.

Entonces, al controlar las radios, puedes crear tu propio modo de avión.

ADVERTENCIA: El uso de Reflection puede fallar en algunos dispositivos (depende de la implementación del fabricante de las clases).

Este código de muestra alterna la red móvil:

private void setMobileRadioEnabled(boolean enabled) { try { final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); final Class conmanClass = Class.forName(conman.getClass().getName()); final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); iConnectivityManagerField.setAccessible(true); final Object iConnectivityManager = iConnectivityManagerField.get(conman); final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); final Method setRadio = iConnectivityManagerClass.getDeclaredMethod("setRadio", Integer.TYPE , Boolean.TYPE); setRadio.setAccessible(true); for (NetworkInfo networkInfo : conman.getAllNetworkInfo()) { if(isNetworkTypeMobile(networkInfo.getType())) { setRadio.invoke(iConnectivityManager, networkInfo.getType(), enabled); } } } catch (Exception e) { Log.e(TAG, "Opss...", e); } } public static boolean isNetworkTypeMobile(int networkType) { switch (networkType) { case ConnectivityManager.TYPE_MOBILE: case ConnectivityManager.TYPE_MOBILE_MMS: case ConnectivityManager.TYPE_MOBILE_SUPL: case ConnectivityManager.TYPE_MOBILE_DUN: case ConnectivityManager.TYPE_MOBILE_HIPRI: case 10: case 11: case 12: case 14: return true; default: return false; } }


Creo que "Settings.System.AIRPLANE_MODE_ON" está en desuso, estoy usando:

public class AirplaneModeService { public boolean run(Context context) { boolean isEnabled = isAirplaneModeOn(context); // Toggle airplane mode. setSettings(context, isEnabled?1:0); // Post an intent to reload. Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", !isEnabled); context.sendBroadcast(intent); return true; } public static boolean isAirplaneModeOn(Context context) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0; } else { return Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0; } } public static void setSettings(Context context, int value) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { Settings.System.putInt( context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, value); } else { Settings.Global.putInt( context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, value); } } }

Espero que esto ayude a alguien.


Después de lollipop, puede usar el método siguiente, pero está oculto y su aplicación necesita permiso de nivel de sistema

<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL"/> ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); mgr.setAirplaneMode(true);


Encontré esta solución para más de 17 si quieres cerrar la conexión a Internet, esto funcionará.

permiso

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

método

@SuppressWarnings({ "unchecked", "rawtypes" }) private void setMobileDataEnabled(boolean state) { try { final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); final Class conmanClass = Class.forName(conman.getClass().getName()); final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); iConnectivityManagerField.setAccessible(true); final Object iConnectivityManager = iConnectivityManagerField.get(conman); final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); setMobileDataEnabledMethod.setAccessible(true); setMobileDataEnabledMethod.invoke(iConnectivityManager, state); } catch (Exception e) { e.printStackTrace(); } }


Esta funciona para mí

public static boolean isAirplaneModeOn() { return Settings.System.getInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0; } public static void setAirPlaneMode(boolean airplaneMode) { Logger.d(LOG_TAG + "setAirPlaneMode airplaneMode: " + airplaneMode) ; int state = airplaneMode ? 1 : 0; Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, state); Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", state); mContext.sendBroadcast(intent); }

Pero necesitas permisos del sistema

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />


Lo siguiente se puede usar en un dispositivo rooteado .

Desde la línea de comandos, puede activar / desactivar el modo de avión con lo siguiente:

ON: settings put global airplane_mode_on 1 am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true OFF: settings put global airplane_mode_on 0 am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

Esto funciona con Android 4.4.2+


Tenga en cuenta que, como se documenta en Android 4.2 API (énfasis agregado):

Nueva configuración global

La configuración del sistema se ha actualizado para admitir usuarios múltiples con la adición de Settings.Global . Esta colección de configuraciones es similar a Settings.Secure settings porque son de solo lectura, pero se aplican globalmente en todos los espacios de usuario en el dispositivo.

Varias configuraciones existentes fueron reubicadas aquí desde Settings.System o Settings.Secure . Si su aplicación actualmente realiza cambios en la configuración definida previamente en Settings.System (como AIRPLANE_MODE_ON ), entonces debe esperar que al hacerlo ya no funcione en un dispositivo que ejecute Android 4.2 o superior si esa configuración se movió a Settings.Global . Puede seguir leyendo las configuraciones que están en Settings.Global , pero debido a que la configuración ya no se considera segura para que las aplicaciones cambien, al intentar hacerlo fallará de manera silenciosa y el sistema escribirá una advertencia en el registro del sistema al ejecutar su aplicación. Android 4.2 o superior.


aquí antes de cada configuración use android.provider así:

public class MainActivity extends Activity implements OnClickListener { Button air; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); air = (Button) findViewById(R.id.button1); air.setOnClickListener(this); } @Override public void onClick(View arg0) { // TODO Auto-generated method stub // read the airplane mode setting boolean isEnabled = android.provider.Settings.System.getInt( getContentResolver(), android.provider.Settings.System.AIRPLANE_MODE_ON, 0) == 1; // toggle airplane mode android.provider.Settings.System.putInt( getContentResolver(), android.provider.Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1); // Post an intent to reload Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", !isEnabled); sendBroadcast(intent); } }


Esta respuesta contiene el código necesario para hacer esto. También asegúrese de tener el permiso WRITE_SETTINGS .

Adaptado del control del modo de avión :

// read the airplane mode setting boolean isEnabled = Settings.System.getInt( getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1; // toggle airplane mode Settings.System.putInt( getContentResolver(), Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1); // Post an intent to reload Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", !isEnabled); sendBroadcast(intent);