如何使用反射

时间:2018-06-01 06:17:00

标签: java android reflection

我正在创建一个系统应用程序,我想启用设备的禁用自动时区值。

此代码不起作用,因为我们需要root权限才能更改系统设置。

Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME_ZONE, isAutomatic ? 0 : 1);

我已经根据设备生根但没有成功,经过大量搜索后发现可以使用Reflection。有人知道怎么做。

1 个答案:

答案 0 :(得分:1)

通过将apk放在system / priv-app而不是system / app中找到解决方案。

Reflection用于访问私有成员或类,Settings.Global不是私有api,但需要安全权限,这可以通过将apk放在system / priv-app文件夹而不是system / app中来解决。

如果设备已植根且apk在路径priv-app

中,则以下代码有效
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME_ZONE, isAutomatic ? 0 : 1);
            } else {
                android.provider.Settings.System.putInt(getContentResolver(), Settings.Global.AUTO_TIME_ZONE, isAutomatic ? 0 : 1);
            }