Проблема с датчиком приближения Android только в устройствах Samsung

Конкретный сценарий, чтобы избежать проблем:
Поведение для деятельности в устройствах Samsung отличалось тем, что каждый раз, когда было обнаружено изменение, для близости он вызывал вызов onPause()/onResume() ТОЛЬКО на устройствах SAMSUNG.

Я очистил датчики приближения в onPause(), что привело к поведению, уникальному для устройств Samsung.

Надеюсь, это сэкономит время для тех, кто сталкивается с этим. Я удалил вызов очистки прослушивателей близости от onPause(), и теперь он работает как ожидается на указанных устройствах.

UPDATE:

То, что упоминается ниже, не является единственной проблемой, датчик близости не ведет себя таким образом. Другая проблема - l-o-c:

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]

код:

 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, не перемещая его.
Как:
Samsung 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()

Samsung Duos: значения флуктуации отличаются от 0.0 и 5.0 в отличие от 8.0 выше

  • Какие существуют другие способы или комбинации перестановок, которые могут быть успешно применены и точно для решения этой проблемы?

  • Это из-за разных датчиков; Датчик приближения GP2A и APDS-9930/QPDS-T930 Близость и свет?

уже потратили на это некоторое время... напрасно

Ответ 1

Итак, получается, что это зарегистрированная проблема с устройствами Samsung, вот коллекция страниц, которая может помочь любому, кто сталкивается с этим:

Пожалуйста, отредактируйте, исправьте, улучшите ответ, если там будет больше ясности. Надеюсь, это сэкономит некоторое время.