Toggle airplane mode in Android
Works for all API versions.
- switch authomaticaly for API < 17
- open Default Activity of Airplane mode for user actions for API >= 17
no root, no system level permission!
in AndroidManifest.xml add permission:
<!--airplane mode-->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
then:
@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();
}
}
}
}
});
}
This answer contains code necessary to do this. Also make sure you have the WRITE_SETTINGS
permission.
Adapted from Controlling Airplane Mode:
// 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);
The following can be used on a rooted device.
From commandline, you can toggle airplane mode on/off with the following:
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
This works with android 4.4.2+