Android API中隱藏的類使用(例如IWindowManager)
阿新 • • 發佈:2019-01-06
以前研究Window和WindowManager的工作機制時會出現找不到IWindowManager和IWindowSession還有IWindow這個幾個類,後來發現在SDKplatforms/android-16/sources/java/android/view下面有幾個aidl檔案,但是高版本的都找不到,被隱藏掉了,研究原始碼的話可以參照這幾個aidl檔案,但是Android確實隱藏了一些類,至於為什麼這得問API的設計人員了。
瞭解Java反射機制的擼澀這裡應該明白怎麼使用這些隱藏的類,既然知道類名和裡面的介面,不多說了,例如在模擬按鍵處理時用到了:
尷尬了,沒有類可以讓你匯入,怎麼辦,重寫唄,引入低版本的aidl檔案到你的工程中,替換裡面的實現方法,處理錯誤後生成自己的ServiceManager和IWindowManagerIBinder wmbinder = ServiceManager.getService( "window" ); final IWindowManager wm = IWindowManager.Stub.asInterface( wmbinder ); 需要引入的類是: import android.os.ServiceManager; import android.view.IWindowManager;
本文轉自http://edu.gamfe.com/tutor/d/37656.htmltry{ 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 }