Как упомянул @eggyal, переключение в режим полета невозможно с версии 4.2 и выше.
Но то, что мы можем сделать, это включить каждую из беспроводных услуг:
Wifi можно контролировать с помощью WifiService ~ getSystemService (Context.WIFI_SERVICE).
Bluetooth может управляться с помощью BluetoothAdapter- SystemService (Context.BLUETOOTH_SERVICE).
После некоторых исследований я обнаружил, что с помощью Java Reflection вы по-прежнему можете управлять радиоприемниками Android (Wifi, сеть, Bluetooth), и в основном Airplane Mode переключает состояние Bluetooth, Wifi и сетей.
Таким образом, контролируя радио, вы можете создать собственный режим полета.
ВНИМАНИЕ: Использование Reflection может не работать на некоторых устройствах (зависит от реализации классов производителем).
Этот пример кода включает мобильную сеть:
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;
}
}