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 联系我们: