Android

How can one detect airplane mode on Android?

Как можно определить режим полета на Android?

В моем приложении есть код, который определяет, активно ли подключен Wi-Fi. Этот код запускает исключение RuntimeException, если включен режим полета. Я все равно хотел бы отображать отдельное сообщение об ошибке в этом режиме. Как я могу надежно определить, находится ли устройство Android в режиме полета?

Переведено автоматически
Ответ 1
/**
* Gets the state of Airplane Mode.
*
* @param context
* @return true if enabled.
*/

private static boolean isAirplaneModeOn(Context context) {

return Settings.System.getInt(context.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;

}
Ответ 2

Расширив ответ Алекса, включив проверку версии SDK, мы имеем:

/**
* Gets the state of Airplane Mode.
*
* @param context
* @return true if enabled.
*/

@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
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;
}
}
Ответ 3

И если вы не хотите опрашивать, активен ли режим полета или нет, вы можете зарегистрировать BroadcastReceiver для намерения SERVICE_STATE и отреагировать на него.

Либо в вашем ApplicationManifest (до Android 8.0):

<receiver android:enabled="true" android:name=".ConnectivityReceiver">
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE"/>
</intent-filter>
</receiver>

или программно (все версии Android):

IntentFilter intentFilter = new IntentFilter("android.intent.action.AIRPLANE_MODE");

BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("AirplaneMode", "Service state changed");
}
};

context.registerReceiver(receiver, intentFilter);

И, как описано в других решениях, вы можете опросить режим полета, когда ваш получатель получил уведомление, и выдать свое исключение.

Ответ 4

При регистрации режима полета BroadcastReceiver (ответ @saxos) Я думаю, имеет смысл сразу узнать состояние настройки режима полета из Intent Extras, чтобы избежать вызова Settings.Global или Settings.System :

@Override
public void onReceive(Context context, Intent intent) {

boolean isAirplaneModeOn = intent.getBooleanExtra("state", false);
if(isAirplaneModeOn){

// handle Airplane Mode on
} else {
// handle Airplane Mode off
}
}
java android