私のアプリは標準の電話で動作しますが、Android プレーヤーでも動作し、HDMI 経由で TV に接続し、マウスでナビゲートします。2 つのナビゲーション方法を区別できるように、デバイスがタッチ スクリーンをサポートしているかどうかをプログラムで決定する方法はありますか?
私はこれを試しましたが、両方のデバイスで true を返します:
getPackageManager().hasSystemFeature("android.hardware.touchscreen");
私のアプリは標準の電話で動作しますが、Android プレーヤーでも動作し、HDMI 経由で TV に接続し、マウスでナビゲートします。2 つのナビゲーション方法を区別できるように、デバイスがタッチ スクリーンをサポートしているかどうかをプログラムで決定する方法はありますか?
私はこれを試しましたが、両方のデバイスで true を返します:
getPackageManager().hasSystemFeature("android.hardware.touchscreen");
PackageManager は、おそらくタッチスクリーンを備えた Android プレーヤー自体を参照します。プレーヤーのディスプレイが HDMI 経由で外部モニターにルーティングされているかどうかを検出できません。デバイスにタッチスクリーンがあるかどうかをパッケージ マネージャーに尋ねると、外部ディスプレイではなく、プレーヤーについて言及しています。
できることの 1 つは、HDMI ポートがアクティブかどうかをチェックしてプレーヤーが外部ディスプレイに接続されているかどうかを検出し、それに応じてナビゲーションを変更することです。
参照: Android デバイスで HDMI ポートを検出する
補足:プレーヤーにタッチスクリーンがなく、パッケージ マネージャーが誤ってタッチスクリーンを持っていると報告している場合は、パッケージ マネージャーのバグか、Android のデバイス メーカーの実装にバグがある可能性があります。
OnTouchListener
の代わりに を使用するOnClickListener
OnTouch はより良いフィードバックを提供し、OnClick が既に行っているすべてのことを行います。両方のケースでこれを行います (したがって、どちらのケースがどちらであるかを把握する必要はありません)。
一部の開発者は、非タッチ デバイスのみを扱っている場合でも、OnClickListeners の代わりに OnTouchListeners を使用します (パフォーマンスが向上し、応答が速くなると主張しているため)。
個人的には、最後の主張が正しいかどうかはわかりませんが、OnClickListener の代わりに OnTouchListener を使用することには (私が認識している) マイナス面がないという開発者の意見に同意します。