美文网首页
系统服务类的反射方法

系统服务类的反射方法

作者: saofeng | 来源:发表于2019-08-10 19:13 被阅读0次

高版本编译在低版本是可以用的,只要minsdk支持,低版本编译的在高版本不可用。
系统服务类的反射方法 注册监听和解注册
也可参考参考https://www.cnblogs.com/garfieldcgf/p/6149285.html
public static int callGetxxdDisplayId(Context context) {
int xxid;
try {
Class<?> clazz = Class.forName("android.multidisplay.xxManager");
String serverName = context.getSystemServiceName(clazz);
Object server = context.getSystemService(serverName);
Method method = clazz.getMethod("getxxmethod");
method.setAccessible(true);
xxid = (int) method.invoke(server);
return xxid;
} catch (Exception e) {
e.printStackTrace();
}
return Display.DEFAULT_DISPLAY;
}

public static void registerDisplayListener(Context context,InvocationHandler mHandler) {
try {
Class<?> clazz = Class.forName("android.xxdisplay.xxdisplayManager");
String serverName = context.getSystemServiceName(clazz);
Object server = context.getSystemService(serverName);
Class<?> mListener = Class.forName("android.xxdisplay.xxdisplayManager$FocusDisplayListener");
Object mObj = Proxy.newProxyInstance(ReflectUtils.class.getClassLoader(),new Class[] { mListener }, mHandler);
Method mMethod = clazz.getDeclaredMethod("registerFocusDisplayListener", new Class[] { mListener });
mMethod.setAccessible(true);
mMethod.invoke(server, new Object[] { mObj });
} catch (Exception e) {
e.printStackTrace();
}
}

public static void unregisterDisplayListener(Context context,InvocationHandler mHandler) {
    try {
        Class<?> clazz = Class.forName("android.xxdisplay.xxdisplayManager");
        String serverName = context.getSystemServiceName(clazz);
        Object server = context.getSystemService(serverName);
        Class<?> mListener = Class.forName("android.xxdisplay.xxdisplayManager$FocusDisplayListener");
        Object mObj  =  Proxy.newProxyInstance(ReflectUtils.class.getClassLoader(),new Class[] { mListener }, mHandler);
        Method mMethod = clazz.getDeclaredMethod("unregisterFocusDisplayListener", new Class[] { mListener });
        mMethod.setAccessible(true);
        mMethod.invoke(server, new Object[] { mObj });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

相关文章

  • 系统服务类的反射方法

    高版本编译在低版本是可以用的,只要minsdk支持,低版本编译的在高版本不可用。系统服务类的反射方法 注册监听和解...

  • DroidPlugin之Binder Hook机制

    hook的根基是反射,并且反射的根基是系统的方法或者属性是static的,这样才能拦截到系统的服务。之后才是基于动...

  • Java学习笔记 27 - 类的加载器、反射

    本文内容介绍1、类加载器2、反射构造方法3、反射成员变量4、反射成员方法5、反射配置文件运行类中的方法 01类加载...

  • 2020-07-04【反射】

    类加载 类加载器 反射概述 获取Class类的对象 反射获取构造方法并使用 反射获取成员遍历并使用 反射获取成员方...

  • 反射

    实体类 反射获取实例 反射获取方法 反射获取属性 补充 testBean.getClasses()返回调用类的所有...

  • Android获取文件UID的方法

    反射android.os.FileUtils类调用getUid方法 (可以兼容至4.4系统) 在5.0以上可以使用...

  • 反射

    Class类与Java反射 通过反射可访问的主要描述信息 访问构造方法 Constructor类的常用方法 Mod...

  • Java基础之反射

    Java-Reflect Class类的使用 方法的反射 成员变量的反射 构造函数的反射 Java类加载机制 一、...

  • java反射和动态代理

    java反射 反射是程序运行时,通过反射直接操作对象或者类。获取类声明的属性和方法,调用方法或者构造对象,设置修改...

  • Java反射基础

    使用反射获取类的信息 反射获取类的信息是通过Class类获取的,常用方法: String getName() 获...

网友评论

      本文标题:系统服务类的反射方法

      本文链接:https://www.haomeiwen.com/subject/gvexrctx.html