以前研究Window和WindowManager的工作機制時會出現找不到IWindowManager和IWindowSession還有IWindow這個幾個類,后來發現在SDKplatforms/android-16/sources/java/android/view下面有幾個aidl文件,但是高版本的都找不到,被隱藏掉了,研究源碼的話可以參照這幾個aidl文件,但是Android確實隱藏了一些類,至於為什么這得問API的設計人員了。
了解Java反射機制的擼澀這里應該明白怎么使用這些隱藏的類,既然知道類名和里面的接口,不多說了,例如在模擬按鍵處理時用到了:
IBinder wmbinder = ServiceManager.getService( "window" );尷尬了,沒有類可以讓你導入,怎么辦,重寫唄,引入低版本的aidl文件到你的工程中,替換里面的實現方法,處理錯誤后生成自己的ServiceManager和IWindowManager
final IWindowManager wm = IWindowManager.Stub.asInterface( wmbinder );
需要引入的類是:
import android.os.ServiceManager;
import android.view.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
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。