Meroelyth
Meroelyth

Reputation: 5590

How to programmatically enable and disable Flight mode on Android 4.2?

Is there a way to disable or enable Flight Mode on Android 4.2?

I use this code that works only for previous Android versions:

android.provider.Settings.System.putInt(
    c.getContentResolver(),   
    android.provider.Settings.System.AIRPLANE_MODE_ON, enable ? 0 : 1
);

Upvotes: 31

Views: 67371

Answers (4)

user3705510
user3705510

Reputation: 11

For KitKat, you have to add android:sharedUserId="android.uid.system" in manifest file.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.airplanesetting"
    android:versionCode="1"
    android:versionName="1.0"
    android:sharedUserId="android.uid.system" >

Upvotes: 0

Sruit A.Suk
Sruit A.Suk

Reputation: 7273

You can't, as written in Official Android 4.2 API Documentation

Some device settings defined by Settings.System are now read-only. If your app attempts to write changes to settings defined in Settings.System that have moved to Settings.Global, the write operation will silently fail when running on Android 4.2 and higher. Even if your value for android:targetSdkVersion and android:minSdkVersion is lower than 17, your app is not able to modify the settings that have moved to Settings.Global when running on Android 4.2 and higher.

However, if you are the OS Developer, you can write it when you set these permissions

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

Then to write and read,

// To Write
Settings.Global.putString(getContentResolver(), "airplane_mode_on", "1");

// To Read
String result = Settings.Global.getString(getContentResolver(), Settings.Global.AIRPLANE_MODE_ON);
Toast.makeText(this, "result:"+result, Toast.LENGTH_SHORT).show();

Upvotes: 16

DavisNT
DavisNT

Reputation: 686

There exist a simple workaround on rooted devices.

To enable Airplane Mode the following root shell commands can be used:

settings put global airplane_mode_on 1
am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true

To disable Airplane Mode these root shell commands can be used:

settings put global airplane_mode_on 0
am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

Info taken from here

Disclaimer: This info is provided "as-is" without any form of warranty.

Upvotes: 44

CommonsWare
CommonsWare

Reputation: 1006674

This is no longer possible, except by apps that are signed by the firmware signing key or are installed on the system partition (typically by a rooted device user).

Upvotes: 24

Related Questions