Android接近传感器问题仅适用于三星设备

Android接近传感器问题仅适用于三星设备,android,android-sensors,samsung-mobile,proximity,proximitysensor,Android,Android Sensors,Samsung Mobile,Proximity,Proximitysensor,避免问题的特定场景: 三星设备中的活动行为不同,每次检测到变化时,为了接近,只会在三星设备上调用onPause()/onResume() 我正在清除onPause()中的接近传感器,这导致了三星设备特有的行为 希望这能为任何面临这一问题的人节省一些时间。我从onPause()中删除了清除邻近侦听器的调用,现在它在提到的设备上按预期工作 更新: 下面提到的并不是唯一的问题,接近传感器并非始终以这种方式工作。另一个问题是信用证: if(!mWakeLock.ishell())mWakeLock.ac

避免问题的特定场景:
三星设备中的活动行为不同,每次检测到变化时,为了接近,只会在三星设备上调用
onPause()/onResume()

我正在清除
onPause()
中的接近传感器,这导致了三星设备特有的行为

希望这能为任何面临这一问题的人节省一些时间。我从
onPause()
中删除了清除邻近侦听器的调用,现在它在提到的设备上按预期工作

更新:

下面提到的并不是唯一的问题,接近传感器并非始终以这种方式工作。另一个问题是信用证:

if(!mWakeLock.ishell())mWakeLock.acquire()

对于上述设备,
if()
会随机返回false,因此并不总是调用
mWakeLock.acquire()

可能相关信息:

mWakeLock = mPowerManager.newWakeLock(field, getLocalClassName()); 
在哪里

field = PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK or 32

我的接近传感器代码仅在
1.三星GT-I9082安卓4.2.2(API 17)[duos grand]
2.三星SM-G925I安卓5.1.1(API 22)[s6 edge]

代码:

 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    ...new SensorEventListener() {
                @Override
                public void onSensorChanged(SensorEvent event) {
                    if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
                        if (event.values[0] <= 5) { //Sleep
                            turnOffScreen();
                        } else { //Wake
                            turnOnScreen();
                        }...
 // registering listener with SensorManager.SENSOR_DELAY_NORMAL);  
三星Duos:与上面的8.0不同,波动值在0.0和5.0之间有所不同

  • 有哪些其他方法或排列组合可以成功和准确地应用于解决此问题

  • 是因为不同的传感器;GP2A接近传感器和APDS-9930/QPDS-T930接近和灯


我已经花了很长时间在这上面了。徒劳的

所以这是三星设备的注册问题,下面是一个页面集合,可以帮助任何人面对这个问题:

  • 使用。这对我来说是有意义的,我的onPause()相关实现也成功地实现了这一点。
    来源和解释:
    帮助我的是:而不是在
    onPause()

    @凌驾 WindowFocusChanged上的公共无效(布尔hasFocus){ super.onWindowFocusChanged(hasFocus); 如果(!hasFocus){ clearProximityListeners(); } }

  • 更多参考资料:
    从完全不同的角度来看,注销上的Bug…Otto总线。。引述:


  • 如果答案更清楚,请对其进行编辑、更正和改进。。希望能节省一些时间。

    请看:准确性不是我的问题,要么问题被误解了,要么我不明白你想说什么,你能解释一下吗?我认为,超过1位的值,接近传感器的意义取决于ODM,因此,覆盖/未覆盖时,值会发生变化,这一事实仅仅意味着这是一个实现细节,而不是“不正确”的行为。这就是我认为我遗漏了一些东西的地方。。。即使将其持续覆盖15-20秒,它也会在该持续时间内波动……而其覆盖时间。因此,如果小于或等于5,则可能必须检查另一个条件。同时检查powerManager服务和wakelock示例,但同一设备对于使用加速计/方向传感器检查的本机和whatsapp呼叫具有完美工作的接近wakelock。我一直认为,只有当你把手机放在耳边时,锁上屏幕才有意义,而不是在明亮的阳光下拔罐。
    02-10 20:12:36.532: D/SensorManager(3467): Proximity, val = 8.0  [far]
    02-10 20:12:36.532: D/SensorManager(29335): Proximity, val = 8.0  [far]
    02-10 20:12:36.532: D/DisplayPowerController(3467): [sensor] setProximitySensorEnabled::unregisterListener
    02-10 20:12:36.532: D/PowerManagerService(3467): [s] DisplayPowerCallbacks : onProximityNegative()
    02-10 20:12:36.562: I/Sensors(3467): Proximity old sensor_state 33554560, new sensor_state : 33554432 en : 0
    02-10 20:12:36.632: I/Sensors(3467): Proximity old sensor_state 33554944, new sensor_state : 33555072 en : 1
    02-10 20:12:36.642: D/SensorManager(29335): registerListener :: 5, TMD4903 Proximity Sensor, 200000, 0,  
    02-10 20:12:36.652: D/SensorManager(29335): Proximity, val = 8.0  [far]
    02-10 20:12:36.662: I/Sensors(3467): ProximitySensor - 8(cm)
    02-10 20:12:36.672: D/SensorManager(29335): Proximity, val = 8.0  [far]
    02-10 20:12:41.752: I/Sensors(3467): Proximity old sensor_state 33554560, new sensor_state : 33554432 en : 0
    02-10 20:12:41.822: I/Sensors(3467): Proximity old sensor_state 33554432, new sensor_state : 33554560 en : 1
    02-10 20:12:41.842: D/SensorManager(29335): registerListener :: 5, TMD4903 Proximity Sensor, 200000, 0,  
    02-10 20:12:41.842: D/SensorManager(29335): Proximity, val = 8.0  [far]
    02-10 20:12:41.872: I/Sensors(3467): ProximitySensor - 8(cm)
    02-10 20:12:41.872: D/SensorManager(29335): Proximity, val = 8.0  [far]
    02-10 20:12:50.482: I/Sensors(3467): ProximitySensor - 0(cm)
    02-10 20:12:50.482: D/SensorManager(29335): Proximity, val = 0.0  [close]
    02-10 20:12:50.482: D/DisplayPowerController(3467): [sensor] setProximitySensorEnabled::registerListener
    02-10 20:12:50.482: D/SensorManager(3467): registerListener :: 5, TMD4903 Proximity Sensor, 200000, 0,  
    02-10 20:12:50.482: D/SensorManager(3467): Proximity, val = 0.0  [close]
    02-10 20:12:50.482: D/PowerManagerService(3467): [s] DisplayPowerCallbacks : onProximityPositive()
    02-10 20:12:50.482: D/PowerManagerService(3467): [s] DisplayPowerCallbacks : onProximityPositive()