Как отключить AIRPLANE MODE планшет поддерживает 4.4.2
Я должен отключить AIRPLANE MODE
а также DATE TIME SETTINGS
в моем приложении, для этого я использовал эти намеренные фильтры, но none
из них works
для меня
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.settings.DATE_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Но раньше я успешно отключил Settings
используя ниже intent-filter
<intent-filter >
<action android:name="android.settings.SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
2 ответа
Что касается версии 4.2 и выше, вы не можете программно управлять режимом полета.
Вы можете сделать это, только если у пользователя есть рутированное устройство.
Как написано в API DOC:
"Некоторые настройки устройства, определенные Settings.System теперь read-only
, Если ваше приложение пытается записать изменения в настройки, определенные в Settings.System, которые переместились в Settings.Global
, операция записи будет молча провалиться при запуске на Android 4.2
и выше. Даже если ваша ценность для android:targetSdkVersion
а также android:minSdkVersion
ниже чем 17
Ваше приложение не может изменять параметры, которые были перемещены в Settings.Global
при работе на Android 4.2
и выше."
TLDR: Не делай этого.
Подумайте, что произойдет, если пользователь не может включить режим полета, хотя он хочет / должен.
Важные системные настройки не могут быть изменены из вашего приложения.
Рекомендую:
- Убедитесь, что режим полета отключен или нет
- Если этот параметр включен, появится сообщение "Это приложение не работает в режиме полета. Открыть приложение настроек системы?" с диалогом "да / отмена"
- Закройте свое приложение и / или откройте приложение системных настроек
РЕДАКТИРОВАТЬ: это выглядит так:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void checkAirplaneMode() {
int mode;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
Log.v(TAG, "work with new api.");
mode = Settings.Global.getInt(getActivity().getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0);
} else {
Log.v(TAG, "work with old api.");
mode = Settings.System.getInt(getActivity().getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0);
}
Log.v(TAG, "airplane mode: " + mode);
if(mode == 1 /* airplane mode is on */) {
new AlertDialog.Builder(getActivity()).setTitle("Sorry!")
.setMessage("This app doesn't work with Airplane mode.\n"
+ "Please disable Airplane mode.\n")
.setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
getActivity().finish();
}
})
.setNegativeButton("Close app", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getActivity().finish();
}
})
.show();
}
}
вот какой-то момент.
- Проверьте
Build.VERSION.SDK_INT
использоватьSettings.Global
для новых устройств. Режим полета перенесен сюда. - Если режим == 1, устройство находится в режиме полета.
- Настройка режима открытого самолета.
startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));