10

避免问题的特定场景:
三星设备中的 Activity 行为不同,每次检测到变化时,对于接近度,它会导致在onPause()/onResume()SAMSUNG 设备上调用 ONLY。

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

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

更新:

下面提到的不是唯一的问题,接近传感器的行为并不一致。另一个问题是 loc:

if (!mWakeLock.isHeld()) mWakeLock.acquire();

随机地,if()上述设备的返回 false 因此mWakeLock.acquire()并不总是被调用。

可能相关信息:

mWakeLock = mPowerManager.newWakeLock(field, getLocalClassName()); 

在哪里

field = PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK or 32

我的接近传感器代码仅在
1. Samsung GT-I9082 Android 4.2.2 (API 17) [duos grand]
2. Samsung SM-G925I Android 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);  

问题: 两个设备上的接近传感器返回的记录值波动,即使我们不断地将手放在手机上几秒钟;10-15 不动它。
喜欢:
三星6 edge-

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()

三星 Duos:波动值在 0.0 和 5.0 不同,与上面的 8.0 不同

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

  • 是不是因为传感器不同?GP2A 接近传感器和 APDS-9930/QPDS-T930 接近和光 ?

已经花了很长时间了..徒劳无功

4

1 回答 1

2

所以事实证明这是三星设备的一个注册问题,这里有一个页面集合,可以帮助任何面临这个问题的人:

  1. 使用onWindowFocusChanged。这对我来说很有意义,我与 onPause() 相关的实现也成功地遵循了这一点。
    来源和解释:activity-onpause-to-handle-focus
    对我有什么帮助:而不是 in onPause();

    @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if(!hasFocus){ clearProximityListeners(); } }

  2. 问题 74464:在没有 Activity#onResume 的情况下调用 Activity#onPause,或者 Context#registerReceiver 失败

  3. 更多参考:
    从完全不同的角度来看,注销时的错误...Otto bus.. 引用:对我们来说,这仅出现在三星设备上。在快速搜索之后,...

如果有更清晰的答案,请编辑,更正,改进答案..希望它能节省一些时间。

于 2016-05-29T10:49:11.020 回答