当用户将手机放在耳朵附近时,如何禁用我的 Activity UI?
我知道有一个 API 可以在有传感器测试接近度时得到回调:
http://developer.android.com/reference/android/hardware/Sensor.html
http://developer.android.com/reference/android/hardware/SensorManager.html
但是我怎样才能禁用 UI(比如用户的脸不会被误认为是 UI 触摸),然后当手机离用户的脸更远时重新启用?
谢谢。
最佳答案
你可以看看 PhoneApp
和 InCallScreen
来自 AOSP 的源代码,了解如何做你想做的事情的一些想法。以下是要点:
- 在支持它的设备上,AOSP 代码利用隐藏的
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK
根据需要关闭触摸屏(参见PhoneApp.updateProximitySensorMode()
方法)。 - 在其他设备上,方法是使用“触摸锁定”叠加层(简单地显示/隐藏覆盖整个屏幕的 View ,这将消耗触摸事件)。参见
initTouchLock()
,enableTouchLock()
和onTouch()
InCallScreen
中的方法源代码(主要处理mTouchLockOverlay
的代码)。
我建议使用覆盖方法,因为它适用于所有设备。
根据您的 UI 层次结构,与切换普通 UI 的触摸和可见性状态相比,使用覆盖可能更好,因为它更易于实现,并且您可以非常轻松地添加一些视觉反馈(也许是调光/动画?)在显示叠加层时。
关于android - 当用户将手机放在他/她的耳朵附近时,在我的 Activity 中禁用 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002849/