Android 使用反射调用自定义AIDL **.Stub.asInterface(IBinder obj)、反射实现关机shutdown
来源:互联网 发布:语音录入软件 编辑:程序博客网 时间:2024/06/05 13:23
自定义AIDL调用
有时根据项目需要会增加系统没有的AIDL文件,如:
新增 com.android.internal.telephony.IVideoTelephony;不使用反射时的调用方式如下(需依赖系统编译才能通过):
private boolean isVTCall(){try{IVideoTelephony vtInterface = null;vtInterface = IVideoTelephony.Stub.asInterface(checkService("videophone"));if(null != vtInterface){if(vtInterface.isVtActive())return true;o}}catch(Exception e){}return false;}----------------private IBinder checkService(String name){IBinder iBinder = null;try{Class<?> clz = Class.forName("android.os.ServiceManager");Method checkService = clz.getMethod("checkService", String.class);checkService.setAccessible(true);iBinder = (IBinder)checkService.invoke(null, name);}catch(Exception e) {}return iBinder;}
使用反射调用
private boolean isVtActive(){boolean isVtActive = false;try{Class<?> clz = Class.forName("com.android.internal.telephony.IVideoTelephony$Stub");Method asInterface = clz.getDeclaredMethod("asInterface", IBinder.class);Object IVideoTelephony = asInterface.invoke(null, checkService("videophone"));Method isVtActiveMethod = IVideoTelephony.getClass().getDeclaredMethod("isVtActive",null);isVtActive = (Boolean)isVtActiveMethod.invoke(IVideoTelephony, null);}catch(Exception e){}return isVtActive;}
代码解析:
1. 首先通过Class 加载”com.android.internal.telephony.IVideoTelephony$Stub”内部类;
2. 接着调用”asInterface”方法生成Object IVideoTelephony实例;
3. 然后获取”isVtActive”方法,通过invoke将实例IVideoTelephony传入并获取返回值即可
通过反射实现关机
public static void shutDown(){ try { Class<?> clz = Class.forName("android.os.ServiceManager"); Method getService = clz.getMethod("getService", String.class); Object powerService = getService.invoke(null, Context.POWER_SERVICE); Class<?> cStub = Class.forName("android.os.IPowerManager$Stub"); Method asInterface = cStub.getMethod("asInterface", IBinder.class); Object IPowerManager = asInterface.invoke(null, powerService); Method shutDown = IPowerManager.getClass().getMethod("shutdown", boolean.class, boolean.class); shutDown.invoke(IPowerManager, false,true); } catch (Exception e) { Log.e("wmb", "--shutDown has an exception"); e.printStackTrace(); } }
关机shutdown代码,亲测有效。
注意点:
调用shutDown.invoke(IPowerManager, false,true);需要系统权限,在manifest中增加android:sharedUserId=”android.uid.system”,并将应用push到/system/priv-app目录下,重启才能生效。
阅读全文
1 0
- Android 使用反射调用自定义AIDL **.Stub.asInterface(IBinder obj)、反射实现关机shutdown
- 反射技术实现关机
- Android--通过AIDL+反射,调用android内部隐藏的服务实现挂断电话
- 反射:使用反射调用方法
- 使用shutdown命令实现远程关机
- Android 使用反射调用Hide方法setShowSoftInputOnFocus
- android反射调用
- android反射调用 .
- Android 反射调用类
- 使用反射调用方法
- Android AIDL proxy/stub 分析
- android 反射机制和反射调用方法
- Android中使用反射实现类似于C语言指针的调用
- C#调用shutdown 来关机
- 利用aidl技术和反射原理拿到自定义系统服务
- 反射实现方法的调用
- 反射机制实现方法调用
- Android中的自定义注解(反射实现-运行时注解)
- 【Android_View】ImageView源码简析笔记(二)
- POJ 2828 Buy Tickets【线段树单点更新+逆序遍历】【经典题】【模板题】
- 如何访问函数内部的变量
- HDU 6082 度度熊与邪恶大魔王 DP
- 在CentOS 7 下安装.Net 框架
- Android 使用反射调用自定义AIDL **.Stub.asInterface(IBinder obj)、反射实现关机shutdown
- 机器学习:偏差、方差与欠拟合、过拟合
- 递归学习简单的小例子之hanoi塔问题
- gRPC 源码编译安装
- web前端入门积累
- 《thinking in JAVA》读书笔记
- PHP基础教程-14 字符串变量简介
- 贴之道-我不想陪伴你太久
- 电话中工厂模式和源码分析