どうやら、ナビゲーションバーの非表示が絡んでいたらしい。
ナビゲーションバーの非表示については、Activityの onCreate() で以下をするのが一般的のようだ。
View view = window.getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | c);
これを、GLSurfaceView を作成して、setContentView をやったあとに呼ぶのか、やる前に呼ぶのか、説明しているブログでも統一されていない。
今回のアプリの実機テストは、F-10Dと、nuuX4で行っているのだが、どちらの機種も、ナビゲーションバーは物理的に表示されていて、OFFにできない。
※上記プログラムの青色部分は、APIレベル的にF-10Dでは対応してないので注意
だが、ナビゲーションバーの表示を切り替えられる、MOVERIO BT-300で試したところ、原因が分かった。
この命令は、あくまで、ナビゲーションバーを“隠す”ものなのだ。
で、隠れた状態で、タッチすると、ナビゲーションバーが表示される。
このナビゲーションバーの表示に、1タッチ取られているから、初回のタッチは検出できず、ナビゲーションバーは一度表示されると、二度と隠れないので、そのままアプリのActivityにタッチイベントが通知される、という動作のようだ。
むむ…。
元々、ナビゲーションバーの非表示を追加したのは、MOVERIO対策。
ディスプレイに有機ELを使用しているため、長時間同じものを表示すると焼きつく、と説明があるからだ。
(ナビゲーションバーなんて、同じものしか表示しないジャン!)
だが、実機テストは、今まで通り、F-10Dで行っていたので、初回タッチ問題が発生してしまったわけだ。
実機テストをnuuX4に変更し、ターゲットをレベル19(Android4.4)に設定して、
View.SYSTEM_UI_FLAG_IMMERSIVEを追加したところ、ナビゲーションバーも表示されなくなり、かつ、1タッチ目から取得できるようになった。
めでたしめでたし。
MOVERIOの技術資料を見ると、この点に触れていて、BT-300より前の機種では、専用のAPIでフルスクリーンにしていたが、BT-300では、Android標準の、上記方法でフルスクリーン化ができるようになったそうな。
もう、実機テストにすら、使えなくなってきたのか >F-10D
しまった、実機テスト用に、年末年始の安いタブレットを買っておけば良かった…!
0 件のコメント:
コメントを投稿