我的应用程序可以在标准手机上运行,但它也可以在我通过 HDMI 连接到电视并使用鼠标导航的 Android 播放器上运行。有没有办法以编程方式确定设备是否支持触摸屏,以便区分两种导航方式?
我试过这个,但它在两个设备上都返回 true:
getPackageManager().hasSystemFeature("android.hardware.touchscreen");
我的应用程序可以在标准手机上运行,但它也可以在我通过 HDMI 连接到电视并使用鼠标导航的 Android 播放器上运行。有没有办法以编程方式确定设备是否支持触摸屏,以便区分两种导航方式?
我试过这个,但它在两个设备上都返回 true:
getPackageManager().hasSystemFeature("android.hardware.touchscreen");
PackageManager 将引用可能具有触摸屏的 Android 播放器本身。它无法检测播放器显示器是否通过 HDMI 路由到外接显示器。当您询问包管理器设备是否有触摸屏时,它指的是播放器而不是外接显示器。
您可以做的一件事是通过检查 HDMI 端口是否处于活动状态并相应地更改导航来检测播放器是否连接到外部显示器。
旁注:如果播放器没有触摸屏,但包管理器错误地报告它有,那么它要么是包管理器的错误,要么是设备制造商的 Android 实现可能有错误。
使用 anOnTouchListener
而不是 anOnClickListener
OnTouch 为您提供更好的反馈,它可以完成 OnClick 已经完成的所有工作。对这两种情况都这样做(因此无需弄清楚哪种情况是哪种情况)。
一些开发人员甚至使用 OnTouchListeners 而不是 OnClickListeners,即使他们只处理非触摸设备(因为他们声称它可以为他们提供更好的性能和更快的响应)。
就个人而言,我不知道最后一个说法是否正确,但我同意那些开发人员的观点,即使用 OnTouchListener 而不是 OnClickListener 确实没有缺点(我知道)。