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


你可能感兴趣的:(Android)