Измените Settings.Global.AUTO_TIME, чтобы всегда быть 1
Я хочу, чтобы приложения для Android считали, что автоматический часовой пояс включен, хотя на самом деле это не так. Я прочитал, что автоматический часовой пояс определяется с помощью переменной Settings.Global.AUTO_TIME, который возвращает значение 1, если автоматический часовой пояс включен, и значение 0, если автоматический часовой пояс выключен. Эта переменная читается с использованием строки ниже
Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME)
Я читал, что эта переменная может быть установлена только системным приложением. Есть ли способ как-то изменить эту переменную? Могу ли я написать приложение, которое позволяет мне изменить эту переменную? Это можно сделать, рутировав устройство андроид.
2 ответа
Наиболее часто предлагаемое решение - использовать
Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 1)
. Однако в конечном итоге вы увидите это сообщение в logcat:
Setting auto_time has moved from android.provider.Settings.System to android.provider.Settings.Global, value is unchanged.
Согласно документации Android, приложения не могут изменять эти настройки.
https://developer.android.com/reference/android/provider/Settings.Global
Глобальные системные настройки, содержащие настройки, которые всегда одинаково применимы ко всем определенным пользователям. Приложения могут их читать, но не могут писать; как и «Безопасные» настройки, они предназначены для предпочтений, которые пользователь должен явно изменить через пользовательский интерфейс системы или специализированные API для этих значений.
Эти параметры доступны только для чтения, если ваше приложение не установлено как системное приложение или не подписано производителем устройства, на котором оно работает.
Большинство людей в конечном итоге рутируют свое устройство, но есть альтернатива. Приложения владельца устройства могут изменять глобальные настройки системы через другой API.
Вы бы сделали это так:
DevicePolicyManager dpm = (DevicePolicyManager) getApplicationContext().getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName component = new ComponentName(getApplicationContext(), DeviceAdminReceiver.class);
dpm.setGlobalSetting(component, Settings.Global.AUTO_TIME, enable ? "1" : "0");
Эта альтернатива в основном подходит для домашних приложений и проприетарных продуктов на базе Android, поскольку на устройстве не может быть учетных записей пользователей. Play Store не будет устанавливать приложения как владелец устройства, это нужно делать вручную.
Вот как это сделать с помощью ADB:
https://developer.android.com/work/dpc/dedicated-devices/cookbook#dev-setup
Ты можешь использовать Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 1)
установить значение из вашего приложения.
Вам нужно иметь WRITE_SETTINGS
разрешение хотя.