将Settings.Global.AUTO_TIME更改为始终为1

时间:2017-04-24 03:12:52

标签: android android-timepicker android-timer

我希望Android应用程序相信自动时区设置为ON,即使实际上并非如此。我读到使用Settings.Global.AUTO_TIME变量检测自动时区,如果自动时区为ON,则返回值1,如果自动时区为OFF,则返回值0。 使用以下行

读取此变量
Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME)

我读到这个变量只能由系统应用程序设置。有办法以某种方式改变这个变量吗?我可以编写一个允许我更改此变量的应用程序吗?这可以通过root设备来完成。

2 个答案:

答案 0 :(得分:0)

您可以使用Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 1)设置应用中的值。

您需要获得WRITE_SETTINGS权限。

答案 1 :(得分:0)

最常见的建议解决方案是使用 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

<块引用>

全局系统设置,包含始终适用于所有定义用户的首选项。应用程序可以读取这些但不允许写入;与“安全”设置一样,这些用于首选项,用户必须通过系统 UI 或这些值的专用 API 明确修改。

除非您的应用作为系统应用安装或由运行它的设备的制造商签名,否则这些设置是只读的。

大多数人最终会生根他们的设备,但还有另一种选择。设备所有者应用可以通过不同的 API 修改全局系统设置。

https://developer.android.com/reference/android/app/admin/DevicePolicyManager#setGlobalSetting(android.content.ComponentName,%20java.lang.String,%20java.lang.String)

你会这样做:

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 商店不会以设备所有者身份安装应用,必须手动安装。

以下是使用 ADB 的方法:

https://developer.android.com/work/dpc/dedicated-devices/cookbook#dev-setup