В моем приложении есть код, который определяет, активно ли подключен Wi-Fi. Этот код запускает исключение RuntimeException, если включен режим полета. Я все равно хотел бы отображать отдельное сообщение об ошибке в этом режиме. Как я могу надежно определить, находится ли устройство Android в режиме полета?
Переведено автоматически
Ответ 1
/** * Gets the state of Airplane Mode. * * @param context * @return true if enabled. */ privatestaticbooleanisAirplaneModeOn(Context context) {
Расширив ответ Алекса, включив проверку версии SDK, мы имеем:
/** * Gets the state of Airplane Mode. * * @param context * @return true if enabled. */ @SuppressWarnings("deprecation") @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) publicstaticbooleanisAirplaneModeOn(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):
И, как описано в других решениях, вы можете опросить режим полета, когда ваш получатель получил уведомление, и выдать свое исключение.
Ответ 4
При регистрации режима полета BroadcastReceiver (ответ @saxos) Я думаю, имеет смысл сразу узнать состояние настройки режима полета из Intent Extras, чтобы избежать вызова Settings.Global или Settings.System :