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