2017-08-02 7 views
0

特定のアンドロイドスマートフォンの画面の一部にハードウェアキーボードを配置したいと思っています(Galaxy S7のキーボードカバーのように)。だから、私はアンドロイドシステムは、常にフルスクリーンビデオの再生などでも、キーボードで占められていない画面の部分を使用する必要があります。しかし、サービスは、占領エリアのタッチイベントを処理することができる必要がありますキーボード。これは起動時には動作する必要はありません。Androidシステム専用画面の一部

解決策は、アンドロイド(ルートアクセス可能)または改変されたLineageOSを使用することがあります。

私はストックアンドロイドのための解決策がないと思う傾向があります。

しかし、Androidオープンソースプロジェクトは複雑すぎて、修正を開始する場所を見つけることができません。ウィンドウマネージャーサービス、サーフェーフリンガー、またはその他の?

私の意図は、サーフェスフリンジャーを変更することが最も一般的な解決策であるということです。 surfaceflingerを変更することも可能ですか、またはHALとバイナリBLOBの一部と静的にリンクされていますか?面白い人はタッチイベントを決して扱わないだろうと思いますよね?

faceflingerに触れていない漠然としたアイデアは、ウィンドウマネージャーを変更して、surfaceflingerにネイティブのものと同じサイズの仮想ディスプレイを作成するように依頼することです。これをネイティブのものの代わりに使用し、 。

もう1つのアイデアは、ウィンドウマネージャのウィンドウの長方形を変更することです。しかし、これが可能かどうかは分かりません(特に全画面ビデオ再生の場合)。

タッチイベントも変更する必要があります。ちなみに、ウィンドウマネージャーはタッチイベントをルーティングしますか?

ウィンドウマネージャを直接バイパスして、私の考えられる変更を、サーフェスフリンジャーで使用するコンポーネントはありますか?例えば、アプリケーションが画面サイズ/解像度についてサーフェーフリンジャーに尋ねることができますか、またはこの情報はウィンドウマネージャによって送信されますか?

もっと簡単な方法がありますか?

ヒント

答えて

0

私はもっと簡単な解決策を自分で見つけました。アンドロイドのウインドウマネージャは、システムによって使用されるディスプレイの領域を制限するために、ルートシェル内のwmコマンドによって変更される可能性のある各ディスプレイのオーバースキャン設定を管理します。これは魅力のように機能します。

はい、ウィンドウマネージャは、入力を上部ウィンドウにルーティングします。しかし、私はどのように、そしてどこで、WindowManagerServiceクラスが巨大な混乱を引き起こしているのか分かりません。私はもはや邪魔したくありません。

マニュアルでは、/ proc(または/ sysの特定のファイルを公開している覚えていない)の特定のファイルを公開するタッチスクリーンドライバについても、固定されたソフトボタンの場所とlinuxキーへのマッピング方法に関する情報コードはシステムに自動的にそれらを使用させるでしょう。したがって、ファイルシステムにそのようなエントリを作成するカスタムカーネルモジュールを使用すると、最終的にはそのトリックが行われます。しかし、それはテストされていません。

ハードウェアキーボードのボタン押下は専用のサービスによってのみ処理されるため、このサービスでは単に/ dev/input/eventを直接読み込みます。

関連する問題