主动查询接近传感器一次?

时间:2013-10-27 00:50:43

标签: android proximitysensor

我需要获取接近传感器的当前值(而不是实现连续监听器)。在一些设备上,第一个报告的值将是默认值(例如“FAR”),其不一定是准确的,并且实际值将仅在第二次或第三次读取之后开始出现。目前,我已经实现了1秒Handler并使用最后报告的值(在经过第二次之后)作为“真实”值,但这个解决方案似乎很粗糙(而且很慢)。是否有更好的方法适用于所有4.0+设备?我可以简单地计算,直到我收到3个读数,但在某些设备(例如GNex)上,第一个值将是正确的,并且只有在传感器实际发生变化时,该值才会发生变化。

1 个答案:

答案 0 :(得分:1)

你可以做我做的事:
你可能在监听器上有一个if语句 - 一个逻辑流程用于near,一个用于远程 而不是等待处理程序 - 这样做:

if(near) {
   myHandler.removeCallbacks(yourRunnableForFar);
   myHandler.postDelayed(yourRunnableForNear,100);
else {
   myHandler.removeCallbacks(yourRunnableForNear);
   myHandler.postDelayed(yourRunnableForFar,100);
}

请注意,不准确的第一个读数将紧跟一个准确的读数,因此最后一个读数“赢”。

如果您没有注册接近度以外的传感器,则此代码可以正常工作。如果您有来自其他传感器的读数流,那么使用静态标志(例如boolean near)仅在状态更改时触发处理程序调用。

<强>精化:
yourRunnableForFaryourRunnableForNear - 是implement Runnable占位符,用于保持应用程序逻辑在接近传感器返回“近”(event.values[0] == 0)或“远”(不是)时执行的操作0)。

myHandler只是您可能创建的任何处理程序,或仅使用Handler myHandler = new Handler(Looper.getMainLooper());

为此声明一个

你可能想要在附近获得一个接近锁定,并释放它并清除远处的监听器。但这是应用程序逻辑,可能与应用程序完全不同。