1. 程式人生 > >Android API中隱藏的類使用(例如IWindowManager)

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