使用Data Ability讀取系統設定項

華為開發者論壇發表於2021-05-21

SystemSettingUtil工具類

public class SystemSettingUtil {
    private static final int LOG_DOMAIN = 218107648;
    private static final String TAG = "SystemSettingUtil";
    private static final HiLogLabel LOG_LABEL = new HiLogLabel(0, LOG_DOMAIN, TAG);
    private static final String LOG_FORMAT = "%{public}s";
    private static final String GET_GLOBAL = "GET_global";
    private static final String GET_SECURE = "GET_secure";
    private static final String GET_SYSTEM = "GET_system";
    private static final String SETTING_VALUE = "value";
    private static final String SYSTEM_SETTING = "dataability:///settings";
    public static String getGlobal(String key) {
        return getSettingValueAsString(key, GET_GLOBAL);
    }
    public static String getSecure(String key) {
        return getSettingValueAsString(key, GET_SECURE);
    }
    public static String getSystem(String key) {
        return getSettingValueAsString(key, GET_SYSTEM);
    }
    public static String getSettingValueAsString(String key, String method) {
        if (TextTool.isNullOrEmpty(key)) {
            HiLog.warn(LOG_LABEL, LOG_FORMAT, "getSettingValueAsString -> key is null or empty");
            return "";
        } else if (TextTool.isNullOrEmpty(method)) {
            HiLog.warn(LOG_LABEL, LOG_FORMAT, "getSettingValueAsString -> method is null or empty");
            return "";
        } else {
            try {
                return DataAbilityHelper.creator(ContextUtil.getHapGlobalContext()).call(Uri.parse(SYSTEM_SETTING),
                        method, key, null).getString(SETTING_VALUE, "");
            } catch (IllegalArgumentException | IllegalStateException | DataAbilityRemoteException e) {
                HiLog.error(LOG_LABEL, LOG_FORMAT, "getSettingValueAsString -> Exception");
                return "";
            }
        }
    }
}

ContextUtil工具類

public class ContextUtil {
 
    private static Context sHapGlobalContext;
 
    public static Context getHapGlobalContext() {
        return sHapGlobalContext;
    }
 
    public static void setHapGlobalContext(Context context) {
        if (context != null) {
            sHapGlobalContext = context;
        }
    }
}

使用方法:

  1. 在MyApplication onInitialize呼叫ContextUtil.setHapGlobalContext(this)設定全域性Context;

  2. 呼叫SystemSettingUtil.getXXX。


注:key常量可使用hdc shell執行以下命令獲取。

settings list system

settings list secure

settings list global


程式碼裡怎麼區分使用者是否調整了系統字型大小設定裡【顯示大小】?

https://developer.huawei.com/consumer/cn/forum/topic/0202539565144520016?fid=23

(出處: 論壇首頁)

解決方案:

private static final String INIT_DPI = "init_dpi";
private static final String DISPLAY_DENSITY_FORCED = "display_density_forced";
SystemSettingUtil.getSecure(INIT_DPI);
SystemSettingUtil.getSecure(DISPLAY_DENSITY_FORCED);

display_density_forced為空即顯示大小為預設,display_density_forced<init_dpi顯示大小為小,display_density_forced>init_dpi顯示大小為大,未修改過顯示大小時兩項都為空。


原文連結: https://developer.huawei.com/consumer/cn/forum/topic/0202553488903740688?fid=0101303901040230869

原作者:π

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2773246/,如需轉載,請註明出處,否則將追究法律責任。

相關文章