2

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

Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME)

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

4

2 回答 2

1

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

于 2021-06-20T12:38:28.640 回答
0

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

不过,您需要获得WRITE_SETTINGS许可。

于 2017-04-24T03:46:20.547 回答