Android开发中一些隐藏类的使用
来源:互联网 发布:红色网络家园下载 编辑:程序博客网 时间:2024/05/19 13:58
在开发中发现,随着android版本的升级,有些class被隐藏掉了。很是苦恼。网上有人提出的方法是将代码放到源码的环境中去编译,这个对我来说有些难搞。首先,没有源码的环境;其次,咋个编译,对我这小白级别的人来说,有难度。在强大的互联网帮助下,找到了一个方法。就是利用Java中的反射机制。
关于什么是反射机制,偶目前为止,也是一知半解,感兴趣的tx自己去学习吧。我就不耽误大家了。
我就来说说,我遇到的问题:
在模拟按键处理时用到了:
IBinder wmbinder = ServiceManager.getService( "window" );
final IWindowManager wm = IWindowManager.Stub.asInterface( wmbinder );
需要引入的类是:
import android.os.ServiceManager;
import android.view.IWindowManager;
很不幸,这两个class在1.6版本后就被隐藏掉了。
花费一天时间,终于找到了解决方法。
方法如下:
1. 首先查找源码,找到了IWindowManager.aidl文件,将源码按照相同的路径在自己的工程中创建;创建好后,发现会提示另外一些需要添加的文件,继续添加,直到没有错误提示。(PS:当然,在过程中,有些地方我认为自己的工程中不会用到,所以擅自屏蔽掉了部分功能,目前还没有发现有什么问题。另附源码地址:
http://www.google.com/codesearch#ukcgseahr9A/trunk/lib/bin_1_5/android/view/WindowManager.aidl&type=cs)
2. 添加代码替换原来的实现方法
try{
Object object = new Object();
Method getService = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
Object obj = getService.invoke(object, new Object[]{new String("window")});
//System.out.println(obj.toString());
windowMger = IWindowManager.Stub.asInterface((IBinder)obj);
}catch(ClassNotFoundException ex){
//ignored
}catch(NoSuchMethodException ex){
//ignored
}catch(IllegalAccessException ex){
//ignored
}catch(InvocationTargetException ex){
//ignored
}
PS:抛出异常部分的添加,最初是没有处理异常的,发现四行实现的代码,老报错。花费n久时间终于明白是没有添加抛出异常处理的问题。
这样,这个问题就算解决了。但这里只是保证编译正确,具体的功能是否正常,还需要我来实际验证。稍后公布结果:)
另附上,关于反射机制的一些文章:
反射机制的应用1:
import android.os.ServiceManager;
ITelephony.Stub.asInterface(ServiceManager.getService("phone")).answerRingingCall();
http://stackoverflow.com/questions/4446469/the-import-android-os-servicemanager-cannot-be-resolved
反射机制的应用2:
使用AIDL http://www.javaask.com/mobile/android/2010/1230/630.html
- Android开发中一些隐藏类的使用
- Android开发中一些隐藏类的使用
- Android开发中隐藏类的使用
- Android开发中隐藏类的使用
- Android应用开发中如何使用隐藏的API
- Android应用开发中如何使用隐藏的API
- android中使用隐藏类的方法
- 【移动开发】 Android隐藏输入法软键盘的一些说明
- android开发中使用到的一些设计者模式
- Android API中隐藏的类使用(例如IWindowManager)
- Android使用源码中隐藏的API
- android隐藏类的使用
- Android 隐藏类的使用
- 使用AndroidFrameworks的隐藏类开发应用 or Android使用定制framework开发应用
- Android应用开发中如何使用隐藏API
- Android应用开发中如何使用隐藏AP
- Android应用开发中如何使用隐藏API
- Android应用开发中如何使用隐藏API
- 用属性来访问类的私有成员
- GoAhead web-server 2.1.8 --- For MSDOS/Watt-32 only
- Windows 64bit 平台使用 regsvr32 注册驱动动态库问题
- 《程序员的思维修炼》读书笔记
- VC 输出打印机
- Android开发中一些隐藏类的使用
- 储备------------工作之余
- VC 通过CWebBrowser2 操作js函数
- word打开很慢解决办法
- JS 判断浏览器客户端类型(ipad,iphone,android)
- ELDK安装过程详解
- Android修改system只读权限:remount
- VC->CE 代码中的差异
- Android视频通话(即时通讯)推荐—语音视频