前言

Android项目中,需要各个APP相互交互有时候需要共享数据和状态,因此经常会使用ContentProviderAIDLSystemProperties等等。

在上面几个中SystemProperties是最简单的一种方式。

但是这个只能在系统应用中调用,因为SystemProperties翻译为中文叫系统属性。

当如果你的是非系统应用,也可以用的,可以通过反射。

SystemProperties系统属性

SystemProperties中文直译[系统属性],是Android系统内属性全局共享方式之一。

通过get和set接口可以对系统的属性进行读取/设置。

它作为一个服务运行,管理系统配置和状态。所有这些配置和状态都是属性。每个属性是一个键值对(key/value pair),其类型都是字符串。

如下都是系统接口,不是系统应用无法使用.

    public static String get(@NonNull String key) {
        return native_get(key);
    }

    public static String get(@NonNull String key, @Nullable String def) {
        return native_get(key, def);
    }

    public static int getInt(@NonNull String key, int def) {
        return native_get_int(key, def);
    }

    public static long getLong(@NonNull String key, long def) {
        return native_get_long(key, def);
    }

    public static boolean getBoolean(@NonNull String key, boolean def) {
        return native_get_boolean(key, def);
    }

    public static void set(@NonNull String key, @Nullable String val) {
        native_set(key, val);
    }

这些属性可能是有些资源的使用状态,进程的执行状态,系统的特有属性。

使用adb改变SystemProperties的值

Android中除了通过get和set接口可以对系统的属性进行读取/设置,还可以通过adb中的getprop和setprop来获取和改变。

adb shell getprop

规则:

adb shell getprop <key> 查看手机上key属性状态值。

# 读取persist.sys.boot_first中保存的值
adb shell getprop persist.sys.boot_first
adb shell setprop

规则:

adb shell setprop key 设置某个属性key的状态值

# 读取persist.sys.boot_first中保存的值
adb shell setprop persist.sys.boot_first true

特别属性

ro. 属性

如果属性名称以ro.开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。

如果设置过,还想去设置,会抛异常的。

libc    : Unable to set property "ro.sys.boot_first" to "false": error code: 0xb
System.err: java.lang.RuntimeException: failed to set system property
System.err:    at android.os.SystemProperties.native_set(Native Method)
System.err:    at android.os.SystemProperties.set(SystemProperties.java:183)
persist. 属性

如果属性名称以persist.开头,当设置这个属性时,其值也将写入/data/property。

net.属性

如果属性名称以net.开头,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名( netresolve模块的使用这个属性来追踪在net.*属性上的任何变化。)

ctrl. 属性

属性ctrl.start和ctrl.stop是用来启动和停止服务。

每一项服务必须在/init.rc中定义.系统启动时,与init守护进程将解析init.rc和启动属性服务。

一旦收到设置ctrl.start属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。

这项服务的启动结果将会放入init.svc.<服务名>属性中。

客户端应用程序可以轮询那个属性值,以确定结果。

参考文章

  1. Android系统属性简介
  2. Android 系统属性SystemProperty分析

相关文章

暂无评论

none
暂无评论...