我使用getResources()。getConfiguration()。hardKeyboardHidden来检测设备是否打开了滑动键盘抽屉(如G1)。
现在我有一个Droid Pro,它总是返回1,所以我的应用认为它有一个滑块打开。
有没有办法告诉设备有键盘,并且它总是打开?
TIA
答案 0 :(得分:2)
我在CM,电话应用程序中遇到了类似的问题。
迄今为止,手机应用的行为如下:
如果键盘处于打开状态,即使在通话过程中屏幕也会保持开启状态。接近传感器不会用于查询设备是否在听到:
mIsHardKeyboardOpen为true导致screenOnImimly也被设置为true:
boolean screenOnImmediately = (isHeadsetPlugged()
|| PhoneUtils.isSpeakerOn(this)
|| ((mBtHandsfree != null) && mBtHandsfree.isAudioOn())
|| mIsHardKeyboardOpen);
对于固定物理键盘,它始终打开(不滑动,处于打开位置)。
如果我保留实际代码,手机应用程序将永远不会使用接近传感器关闭屏幕。
如果没有办法猜测键盘是固定还是滑动,我将定义一个新的系统属性ro.product.has_fixed_keyboard,并在我的设备中将其设置为1,然后更改Phone应用程序的代码以绕过如果ro.product.has_fixed_keyboard为1,则打开KeyboardOpen。
EDIT(11/23/2012):这是实现,合并到CM7: http://review.cyanogenmod.org/#/c/11926/
答案 1 :(得分:0)
您给出的结果是准确的,所以我认为它给你的结果没有问题。
让您的应用程序监听配置更改,如果它从未收到键盘隐藏状态,则假设它始终处于打开状态。
如果设备是滑块并且键盘处于暴露状态且设备始终显示键盘,那么您的应用程序应该做出同样的反应,因此我不确定您要完成什么。
如果您确实需要判断键盘是否始终打开,只需添加代码以确定设备是否具有始终显示的键盘,只需识别使用的设备即可。如果您想支持任何硬件始终显示键盘的设备,那么您可能会懒惰并询问用户并保存结果。或者,当您发现更多符合此条件的设备时,您可以继续更新您的应用。