当用户将手机靠近他/她的耳朵时,如何禁用我的活动用户界面?
我知道当有一个传感器来测试Proximity时,有一个API可以回调:
http://developer.android.com/reference/android/hardware/Sensor.html
http://developer.android.com/reference/android/hardware/SensorManager.html
但是如何禁用用户界面(例如用户的脸部不会错误地触摸用户界面),然后在手机远离用户脸部时重新启用?
谢谢。
答案 0 :(得分:0)
我可以想到几个方面:
你可以打电话
view.setClickable(false);
在所有UI元素上。我不确定,但你可能只能在你的顶层父布局上调用它,这可能会有效。
您可以使用
将布局设置为不可见yourParentLayout.setVisibility(View.INVISIBLE);
会隐藏所有可能无法点击的UI元素。
其中一个可能是我认为最好的选择。您可以使用非公共API关闭并打开可以找到它们的屏幕,如果您在此处搜索以打开/关闭的方式打开屏幕。
我还建议如果您想要并且有时间查找并查看处理电话呼叫的应用程序的源代码,它会有您正在寻找的行为,因此您可能会使用类似的方法(尽管我没有看过这个来源,因此他们可能会使用非公共API关闭并打开屏幕。)
在手机移开后恢复您的视图时,您只需在onSensorChanged()方法中添加一个检查,检查接近传感器是否不再感应到近距离物体。如果不是,则撤消上面使用的任何方法,使您的视图无法点击。
答案 1 :(得分:0)
您可以查看AOSP的PhoneApp
和InCallScreen
源代码,了解如何做您想做的事情。以下是要点:
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK
根据需要关闭触摸屏(请参阅PhoneApp.updateProximitySensorMode()
方法)。initTouchLock()
来源中的enableTouchLock()
,onTouch()
和InCallScreen
方法(主要涉及mTouchLockOverlay
的代码)。我建议使用叠加方法,因为它适用于所有设备。
根据您的UI层次结构,与切换普通用户界面的触摸和可见性状态相比,使用叠加层也可能更好,因为它更容易实现,您可以非常轻松地添加一些视觉反馈(可能是调光/动画?)显示叠加层。