Android API中隐藏的类使用(例如IWindowManager)


     以前研究Window和WindowManager的工作机制时会出现找不到IWindowManager和IWindowSession还有IWindow这个几个类,后来发现在SDKplatforms/android-16/sources/java/android/view下面有几个aidl文件,但是高版本的都找不到,被隐藏掉了,研究源码的话可以参照这几个aidl文件,但是Android确实隐藏了一些类,至于为什么这得问API的设计人员了。

    了解Java反射机制的撸涩这里应该明白怎么使用这些隐藏的类,既然知道类名和里面的接口,不多说了,例如在模拟按键处理时用到了:

  

    IBinder wmbinder = ServiceManager.getService( "window" );

  final IWindowManager wm = IWindowManager.Stub.asInterface( wmbinder );

  需要引入的类是:

  import android.os.ServiceManager;

  import android.view.IWindowManager;
     尴尬了,没有类可以让你导入,怎么办,重写呗,引入低版本的aidl文件到你的工程中,替换里面的实现方法,处理错误后生成自己的ServiceManager和IWindowManager
  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  }
本文转自http://edu.gamfe.com/tutor/d/37656.html



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: