Android 9.0 中Settings.System的使用(安卓系统全局变量)

在安卓系统开发的过程中,常常需要写一下标志位来保存数据。通常会使用sharepreferences来写数据,但是存在一个问题,如果用户在setting中清除应用数据的话,相应的标志位也会被清除。这里我们提供一种写在系统里面标志位(系统全局变量)的方法。

一、在系统中添加自定义字段

第一步:

/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

class DatabaseHelper extends SQLiteOpenHelper{
//声明变量
private static final String SYSTEM_UI_ICON_SHOW = "system_ui_icon_show";
}


 private void loadSystemSettings(SQLiteDatabase db) {
//添加下面的方法
loadStringSetting(stmt, SYSTEM_UI_ICON_SHOW, R.string.quick_settings_tiles_default_show_framework);
}

第二步:

/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

<!--要写的数据-->
<string name="quick_settings_tiles_default_show_framework">wifi,location,cell,hotspot,sound,nfc,bt,rotation,airplane,screenshot,flashlight,more
        </string>

很方便我们就写好了标志位,下面说一下如何读写相应的数据。

//这样很方便的话就可以获取系统中的数据,读数据
String show_new= Settings.System.getString(getContext().getContentResolver(),"system_ui_icon_show");
        Log.e("whxwhx", "show_new" + show_new);

//写数据showStr
 Settings.System.putString(mContext.getContentResolver(), "system_ui_icon_show",showStr);

这样很方便我们就在系统中创建了一个标志位。这种方法的标志位使用还是很常见的。上面只提供了String的相应操作的方法,int什么的都是一样的。

温馨提醒,如果是MTK平台的代码

vendor/mediatek/proprietary/packages/apps/SettingsProvider 里面去创建这个标志位。

因为在mk文件中我们可以看见下面的语句,使用MtkSettingsProvider去覆盖系统中的SettingsProvider。

LOCAL_PACKAGE_NAME := MtkSettingsProvider
LOCAL_OVERRIDES_PACKAGES := SettingsProvider

二、注意

如果实在普通的app中使用并修改某个值的时候,还应该注意要动态申请权限。

//申请权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!Settings.System.canWrite(MainActivity.this)) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                intent.setData(Uri.parse("package:" + MainActivity.this.getPackageName()));
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            }
        }

还有一个权限

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

在获取到权限以后,我们就可以修改系统中的默认值,例如修改亮度。

private static final int MIN_SCREEN_TIMEOUT_VALUE = 15000;

//修改系统灭屏时间为15秒
Settings.System.putInt(getApplicationContext().getContentResolver(),
                    "screen_off_timeout", MIN_SCREEN_TIMEOUT_VALUE);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值