facebook twitter youtube
Salesforce Java Android PHP JavaScript MySQL Perl node.js HTML iOS
in Android - 20 10月, 2014
by sato - no comments
Presentationクラスについて

最近AndroidのPresentationクラスを調べたのでメモ。

調べたコードは下記。
https://android.googlesource.com/platform/frameworks/base/+/android-4.2.2_r1/core/java/android/app/Presentation.java

PresentationクラスはDialogクラスを継承したクラスとなっている。
外部ディスプレイ出力を行う際にポイントになるのはcreatePresentationContext()。
このメソッドではDialogクラスのコンストラクタに渡すContextを作り直し、
Presentationクラスのコンストラクタの引数で指定したDisplay用のWindowManagerを使えるようにしている。

外部ディスプレイ用のWidowManagerを使用出来るようにする仕組みは下記となっている。
1.Context.createDisplayContext()で外部ディスプレイ用のContextを作成
2.作成したContextでWindowManagerImplを取得
3.取得したWindowManagerImplから外部ディスプレイ用のWindowManagerImplの再生成
4.ContextThemeWrapperを再生成しgetSystemService()でWindowManagerを呼び出されたら手順3で作成したWindowManagerImplを渡す。

調べた限りはDialogクラスのshow()メソッド等はオーバーライドされていないので、
別ディスプレイ用のContextをDialogクラスに渡すことで外部ディスプレイ表示を行っていると考えられる。

WindowManagerImplの処理を見るとcreateDisplayContext()で作成したContextから取得したWindowManagerを使用すれば
addView()で別ディスプレイにViewを表示できるように見えるが試してはいない。