通过反射方式获取Android设备系统属性

简介: 通过反射方式获取Android设备系统属性【5月更文挑战第1天】

1.定义属性的操作类

//获取属性
    static String getProperty(String key, String defaultValue) {
        String value = defaultValue;
        try {
            //获取对应的属性类 SystemProperties
            Class<?> c = Class.forName("android.os.SystemProperties");
            //得到具体的方法,第一个参数 表示要查找的方法名   后面的参数指定对应的形参类型
            Method get = c.getMethod("get", String.class, String.class);
            //Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,返回值也是对象
            //invoke 就是调用对应类的对应方法  第一个参数是要调用的方法所隶属的对象实体  第二个参数是方法的参数值
            value = (String) get.invoke(c, key, "unknown" );
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            return value;
        }
    }
 
    //设置属性
    public static void setProperty(String key, String value) {
        try {
            Class<?> c = Class.forName("android.os.SystemProperties");
            Method set = c.getMethod("set", String.class, String.class);
            set.invoke(c, key, value);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2.调用获取属性

String property = getProperty("ro.oem.key1", "unknown");

  try {
 
            Class secure = Class.forName("android.provider.Settings$Secure");
            Method method = secure.getDeclaredMethod("putInt",android.content.ContentResolver.class,java.lang.String.class,int.class);
            method.invoke(null,getContentResolver(),SHOW_IME_WITH_HARD_KEYBOARD,isChecked ? 1 : 0);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }

内部类使用 $ 连接外部类和内部类

getDeclaredMethod需要指定方法的参数,如果不指定参数类型,默认查找没有参数的方法,有可能会找不到方法,int 这种基本数据类型 使用int.class 其他类使用全类名

invoke 方法需要传入参数,第一个参数是方法的拥有者,一般传null即可,后面传的是方法的参数


目录
相关文章
|
2天前
|
Android开发
Android获取蓝牙设备列表的方法
Android获取蓝牙设备列表的方法
14 5
|
2天前
|
Android开发
Android获取当前系统日期和时间的三种方法
Android获取当前系统日期和时间的三种方法
16 4
|
2天前
|
Android开发
Android监听USB设备插拔
Android监听USB设备插拔
17 7
|
2天前
|
Android开发
Android 获取 USB设备列表
Android 获取 USB设备列表
14 4
|
2天前
|
Android开发
获取Android设备屏幕大小
获取Android设备屏幕大小
13 3
|
2天前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
13 5
|
3天前
|
存储 缓存 Android开发
Android系统分区与升级
Android系统分区与升级
21 4
|
3天前
|
安全 搜索推荐 物联网
构建未来:基于Android的智能物联网家居系统
【5月更文挑战第15天】 在快速发展的数字化时代,智能物联网(IoT)技术与移动操作系统的结合正在塑造未来家居的生活方式。特别是Android平台,以其开放性、灵活性和广泛的用户基础,成为智能家居创新的理想选择。本文将探讨如何利用Android系统构建一个高效、安全且易于扩展的智能家居控制系统,涵盖系统设计、关键技术实现以及可能面临的挑战。通过分析具体案例,我们旨在为开发者和企业提供一套可行的解决方案蓝图,以促进智能家居领域的进一步发展。
|
3天前
|
缓存 安全 Java
Android中的persistent属性
Android中的persistent属性
8 2
|
3天前
|
存储 监控 Java
Android Service之设备存储空间监控 DeviceStorageMonitorService
Android Service之设备存储空间监控 DeviceStorageMonitorService
18 2