博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android系统开发之Systemproperties的反射用法及如何自定义名称
阅读量:6793 次
发布时间:2019-06-26

本文共 2709 字,大约阅读时间需要 9 分钟。

本文原作者 长鸣鸟 ,未经同意,转载不带名的严重鄙视。

Systemproperties的作用就不说了,先简述一下其用法:

SystemProperties.set("persist.sys.enable","true");//将persist.sys.enable的值设置为trueSystemProperties.get("persist.sys.enable","false");//获取persist.sys.enable的值,如果获取不到,以“false”作为默认值

如果想得到一个bool值,可以用:

SystemProperties.getBoolean("persist.sys.enable",false);

其他类似。

不过在这之前,应将该应用调为系统级别应用。

AndroidManifest.xml:

但这只适用于Android Source的开发者,普通app开发只能使用反射方法。

谷歌反对这种用法,但存在即合理,下面是我写的一个示例,可以直接拿去用,不谢:

package com.android.xxx;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import android.content.Context;import android.net.ConnectivityManager;public class SysProp {    private static Method sysPropGet;    private static Method sysPropSet;    private SysProp() {    }    static {        try {            Class
S = Class.forName("android.os.SystemProperties"); Method M[] = S.getMethods(); for (Method m : M) { String n = m.getName(); if (n.equals("get")) { sysPropGet = m; } else if (n.equals("set")) { sysPropSet = m; } } } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static String get(String name, String default_value) { try { return (String) sysPropGet.invoke(null, name, default_value); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return default_value; } public static void set(String name, String value) { try { sysPropSet.invoke(null, name, value); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }}

本文原作者 长鸣鸟 ,未经同意,转载不带名的严重鄙视。

可以通过命令adb shell :

getprop查看设备上所有属性状态值。   或者 getprop XX.XX查看某个属性状态   使用setprop XX.XX yy 设置某个属性的状态

下面问题来了,如果我要新增一个属性persist.backdata.enable怎么办?

按照正常思路,应该是SystemProperties.set("persist.backdata.enable","false");
可惜这个命名不符规则。
编译不会出错,但什么也写不进去,当然也读不出来。
我们的方法没有错,错的是规则,那么我们就来修改规则。
打开external/sepolicy/property_contexts,加上一句:

@@ -56,6 +56,7 @@  persist.sys.            u:object_r:system_prop:s0 persist.service.        u:object_r:system_prop:s0 persist.service.bdroid. u:object_r:bluetooth_prop:s0 persist.security.       u:object_r:system_prop:s0+persist.backdata.      u:object_r:system_prop:s0

整编系统后就可以正常使用persist.backdata.*

本文原作者 长鸣鸟 ,未经同意,转载不带名的严重鄙视。
That's all.

你可能感兴趣的文章
LEXUS OPENCART 自适应主题模板 ABC-0019-01 HIGHLIGHTED FEA
查看>>
设置ListView页眉注意事项
查看>>
ubuntu 更新出错
查看>>
nginx学习笔记(8)虚拟主机名---转载
查看>>
elasticsearch6 java 操作手册
查看>>
[LeetCode] Symmetric Tree
查看>>
jroo国际化实现方式
查看>>
【学习笔记3】解决struts2配置文件无提示问题
查看>>
设计模式学习笔记之单例模式(Java实现)
查看>>
hbase并发问题
查看>>
php下载文件
查看>>
Kurento Modules
查看>>
多种控制器的创建方式
查看>>
NSUserDefaults 简介,使用 NSUserDefaults 存储自定义
查看>>
IDEA_15构建SSM登录功能(1)
查看>>
Linux就是这个范儿
查看>>
基于JSTL自定义标签库
查看>>
hibernate里使用JDBC查询示例代码
查看>>
关闭tomcat命令窗体
查看>>
使用hive的常用命令语句
查看>>