获取系统设置的当前值,并在需要时更改值

时间:2018-08-20 21:25:51

标签: java android

我对Android和Java还是很陌生,但是我正在通过观看教程和提问来积极学习。到目前为止,我正在通过在Android Studio中编写自己的应用进行练习。我想从更艰难的事情开始。所以,让我解释一下该应用程序对你们有什么作用。我希望最终产品显示一个UI(显然),并在屏幕中间显示一个“更改值”按钮。不过,这对我来说并不是难事。我的UI设置让我很满意。但是,我正在努力的部分是Java部分。通过我的研究,我找不到与我要完成的工作有关的任何事情。

我要做的是检查位于Android设置数据库的全局表(“ adb_enabled”)中的字符串的值,如果已启用(“ 1”),则将其更改为(“ 0”)。我看过有关如何更改亮度和获取当前时间的指南,但是它们并没有帮助我多少。

这是我的参考代码:

Settings.Global.putInt( getContentResolver() ,
            Settings.Global.LOCKSCREEN_AD_ENABLED , 0 );

执行上面的代码,我收到以下错误:error: cannot find symbol variable LOCKSCREEN_AD_ENABLED。有谁知道我该如何解决以上错误?谢谢!

1 个答案:

答案 0 :(得分:0)

如果您的应用程序是系统应用程序,则可以在系统设置中进行更改。非系统应用程序,即安装在数据分区中的应用程序无法修改系统设置。非系统应用只能使用Intent或系统UI打开修改设置。

来自官方documentation

  

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

如果您的应用是系统应用,则可以使用以下代码进行更改(仅适用于系统应用):

int adb = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
  adb = Settings.Global.getInt(getApplicationContext().getContentResolver(),
          Settings.Global.ADB_ENABLED, 0);
}
// toggle the USB debugging setting
adb = adb == 0 ? 1 : 0;
Settings.Secure.putInt(getApplicationContext().getContentResolver(),
        Settings.Secure.ADB_ENABLED, adb);

将以下权限添加到AndroidManifest.xml

  <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
  <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"></uses-permission>