Android P Settings存储

Settings数据存储
分别在如下三个内部类实现
系统设置,包含其他系统首选项。 这个表包含简单的名称/值对。 有方便用于访问单个设置条目的功能。
Settings.java (core\java\android\provider):    public static final class System extends NameValueTable {
安全的系统设置,其中包含应用程序可以读取但不允许写入的系统首选项。 这些是用户必须通过系统UI或专用API显式修改这些值的首选项,而不能由应用程序直接修改。
Settings.java (core\java\android\provider):    public static final class Secure extends NameValueTable {
全局系统设置,其中包含的首选项始终始终应用于所有已定义的用户。 应用程序可以读取这些内容,但不允许编写这些内容; 像“安全”设置一样,这些都是用户必须通过系统UI或专用API对这些值进行显式修改的首选项。
Settings.java (core\java\android\provider):    public static final class Global extends NameValueTable {

对应的Uri
 public static final String AUTHORITY = "settings";
 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/system");
 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/secure");
 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/global");
 
 使用HashSet<String>存储key
 均包含各类型get和set方法
 
 通过ContentProvider写入数据,保存在settings_system.xml settings_secure.xml settings_global.xml中
 
 
public boolean putStringForUser(ContentResolver cr, String name, String value,
        String tag, boolean makeDefault, final int userHandle) {
    try {
        Bundle arg = new Bundle();
        arg.putString(Settings.NameValueTable.VALUE, value);
        arg.putInt(CALL_METHOD_USER_KEY, userHandle);
        if (tag != null) {
            arg.putString(CALL_METHOD_TAG_KEY, tag);
        }
        if (makeDefault) {
            arg.putBoolean(CALL_METHOD_MAKE_DEFAULT_KEY, true);
        }
        IContentProvider cp = mProviderHolder.getProvider(cr);
        cp.call(cr.getPackageName(), mCallSetCommand, name, arg);
    } catch (RemoteException e) {
        Log.w(TAG, "Can't set key " + name + " in " + mUri, e);
        return false;
    }
    return true;
}

SettingsProvider.java

    private static final String TABLE_SYSTEM = "system";
    private static final String TABLE_SECURE = "secure";
    private static final String TABLE_GLOBAL = "global";

@Override
public Bundle call(String method, String name, Bundle args) {
    final int requestingUserId = getRequestingUserId(args);
    switch (method) {
        case Settings.CALL_METHOD_GET_GLOBAL: {
            Setting setting = getGlobalSetting(name);
            return packageValueForCallResult(setting, isTrackingGeneration(args));
        }

        case Settings.CALL_METHOD_GET_SECURE: {
            Setting setting = getSecureSetting(name, requestingUserId,
                    /*enableOverride=*/ true);
            return packageValueForCallResult(setting, isTrackingGeneration(args));
        }

        case Settings.CALL_METHOD_GET_SYSTEM: {
            Setting setting = getSystemSetting(name, requestingUserId);
            return packageValueForCallResult(setting, isTrackingGeneration(args));
        }

        case Settings.CALL_METHOD_PUT_GLOBAL: {
            String value = getSettingValue(args);
            String tag = getSettingTag(args);
            final boolean makeDefault = getSettingMakeDefault(args);
            insertGlobalSetting(name, value, tag, makeDefault, requestingUserId, false);
            break;
        }

        case Settings.CALL_METHOD_PUT_SECURE: {
            String value = getSettingValue(args);
            String tag = getSettingTag(args);
            final boolean makeDefault = getSettingMakeDefault(args);
            insertSecureSetting(name, value, tag, makeDefault, requestingUserId, false);
            break;
        }

        case Settings.CALL_METHOD_PUT_SYSTEM: {
            String value = getSettingValue(args);
            insertSystemSetting(name, value, requestingUserId);
            break;
        }

        case Settings.CALL_METHOD_RESET_GLOBAL: {
            final int mode = getResetModeEnforcingPermission(args);
            String tag = getSettingTag(args);
            resetGlobalSetting(requestingUserId, mode, tag);
            break;
        }

        case Settings.CALL_METHOD_RESET_SECURE: {
            final int mode = getResetModeEnforcingPermission(args);
            String tag = getSettingTag(args);
            resetSecureSetting(requestingUserId, mode, tag);
            break;
        }

        default: {
            Slog.w(LOG_TAG, "call() with invalid method: " + method);
        } break;
    }

    return null;
}

    private boolean insertGlobalSetting(String name, String value, String tag,
            boolean makeDefault, int requestingUserId, boolean forceNotify) {
        if (DEBUG) {
            Slog.v(LOG_TAG, "insertGlobalSetting(" + name + ", " + value  + ", "
                    + ", " + tag + ", " + makeDefault + ", " + requestingUserId
                    + ", " + forceNotify + ")");
        }
        return mutateGlobalSetting(name, value, tag, makeDefault, requestingUserId,
                MUTATION_OPERATION_INSERT, forceNotify, 0);
    }
对应xml中处理数值
    private boolean mutateGlobalSetting(String name, String value, String tag,
            boolean makeDefault, int requestingUserId, int operation, boolean forceNotify,
            int mode) {
        // Make sure the caller can change the settings - treated as secure.
        enforceWritePermission(Manifest.permission.WRITE_SECURE_SETTINGS);

        // Resolve the userId on whose behalf the call is made.
        final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId);

        // If this is a setting that is currently restricted for this user, do not allow
        // unrestricting changes.
        if (name != null && mUserManagerInternal.isSettingRestrictedForUser(
                name, callingUserId, value, Binder.getCallingUid())) {
            return false;
        }

        // Perform the mutation.
        synchronized (mLock) {
            switch (operation) {
                case MUTATION_OPERATION_INSERT: {
                    return mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_GLOBAL,
                            UserHandle.USER_SYSTEM, name, value, tag, makeDefault,
                            getCallingPackage(), forceNotify, CRITICAL_GLOBAL_SETTINGS);
                }

                case MUTATION_OPERATION_DELETE: {
                    return mSettingsRegistry.deleteSettingLocked(SETTINGS_TYPE_GLOBAL,
                            UserHandle.USER_SYSTEM, name, forceNotify, CRITICAL_GLOBAL_SETTINGS);
                }

                case MUTATION_OPERATION_UPDATE: {
                    return mSettingsRegistry.updateSettingLocked(SETTINGS_TYPE_GLOBAL,
                            UserHandle.USER_SYSTEM, name, value, tag, makeDefault,
                            getCallingPackage(), forceNotify, CRITICAL_GLOBAL_SETTINGS);
                }

                case MUTATION_OPERATION_RESET: {
                    mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_GLOBAL,
                            UserHandle.USER_SYSTEM, getCallingPackage(), mode, tag);
                } return true;
            }
        }

        return false;
    }
    
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 13是Android操作系统的一个版本,通过“settings”可以访问设备的各种设置选项。在Android 13的设置中,用户可以对设备进行个性化的配置和管理。 首先,用户可以在设置中调整设备的显示设置。包括屏幕亮度、分辨率、字体大小等选项,用户可以根据自己的喜好和需求进行调整。此外,还可以设置壁纸、锁屏样式和桌面图标等,为手机带来更好的视觉体验。 其次,用户可以在设置中管理网络连接。可以设置Wi-Fi网络和移动数据的开关,连接到可用的Wi-Fi网络,管理保存的Wi-Fi网络和移动数据的使用情况,以避免流量浪费。此外,还可以进行蓝牙、NFC等无线通信功能的管理。 除此之外,设置还提供了安全和隐私选项。用户可以设置屏幕锁定方式,如图案、密码、指纹等,保护手机中的个人信息。还可以管理应用程序权限,决定哪些应用可以访问相机、麦克风、联系人等敏感信息。 设置还涵盖了音频、电池、存储、应用管理等方面。用户可以调整音量和声音模式、查看电池使用情况、管理内部存储和外部存储设备等。此外,还可以管理应用程序,包括安装、卸载、更新和权限管理等选项。 总而言之,Android 13的设置提供了全面的设备管理选项,用户可以根据自己的需要进行个性化配置和管理。无论是调整显示设置、管理网络连接还是保护个人信息,用户都可以通过设置轻松地完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值