10

określonego scenariusza, aby uniknąć problemów:
Zachowanie na aktywność w urządzeniach Samsung różnił się w sposób, który za każdym razem nastąpiła zmiana wykryta, na bliskości, to spowodowało wywołanie onPause()/onResume() TYLKO na urządzeniach SAMSUNG.Android problem czujnik zbliżeniowy tylko w urządzeniach Samsung

Czyściłem czujniki zbliżeniowe w onPause(), co spowodowało zachowanie unikalne dla urządzeń Samsung.

Mam nadzieję, że zaoszczędzi to trochę czasu dla każdego, kto stoi w obliczu tego. Usunąłem rozmowę usuwania słuchaczy zbliżeniowych z onPause() i teraz działa ona zgodnie z oczekiwaniami na wymienionych urządzeniach.

UPDATE:

Co jest wymienione poniżej nie jest jedynym problemem, czujnik zbliżeniowy nie konsekwentnie zachowywać się w ten sposób. Innym problemem jest L-O-C:

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

losowo na if() powraca sztuczne dla wspomnianych urządzeń stąd mWakeLock.acquire() nie zawsze jest wywoływana.

ewentualnie istotne informacje:

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

gdzie

field = PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK or 32 

Mój kod czujnik zbliżeniowy działa nieprawidłowo tylko na
1. Samsung GT-I9082 z Androidem 4.2.2 (API 17) [duos grand]
2. Samsung SM-G925I Android 5.1.1 (API 22) [S6 krawędź]

kod:

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

problem: Zapisane wartości zwracane przez czujnik zbliżeniowy na obu urządzeniach niestabilne, nawet gdy kładziemy rękę na telefony stale przez kilka sekund; 10-15 bez przenoszenia.
jak:
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: wartości wahań różnią się od 0,0 do 5,0 w przeciwieństwie do 8,0 powyżej

  • Co są inne sposoby lub permutacji kombinację, która może być zastosowane pomyślnie i dokładnie, aby rozwiązać ten problem?

  • Czy to z powodu różnych czujników; Czujnik zbliżeniowy GP2A i APDS-9930/QPDS-T930 Proximity & Światło?

już spędził trochę czasu na it..in próżny

+0

Patrz: http://stackoverflow.com/questions/33405259/why-sensors-value-is-different-in-different-android-devices/33405362#33405362 –

+0

dokładność nie jest mój problem, czy to pytanie zostało niezrozumiany lub nie rozumiem, co chcesz powiedzieć, czy możesz rozwinąć – user2450263

+0

Uważam, że poza 1 bit wartości sens czujnika zbliżeniowego zależy od ODM, więc fakt, że wartość zmienia się przy zakrywaniu/odkrywaniu, oznacza tylko jest to szczegół implementacji, a nie "nieprawidłowe" zachowanie. –

Odpowiedz

2

więc okazuje się, że jest to zarejestrowany problem z urządzeniami Samsung, tutaj jest to zbiór stron, które mogłyby pomóc nikomu stoi tak:

  1. Użyj onWindowFocusChanged. To miało dla mnie sens, a moja implementacja związana z funkcją onPause() powiodła się.
    Źródło i wyjaśnienie: activity-onpause-to-handle-focus
    Co pomogło mi: zamiast w onPause();

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

  2. Issue 74464:Activity#onPause called without Activity#onResume, or can Context#registerReceiver failed

  3. Więcej referencyjny:
    Z zupełnie innym aspekcie, Bugu na UNREGISTER ... autobusowego Otto .. Cytat: For us, this only appears on Samsung devices. And after a quick search,...

Proszę edytować, poprawić , popraw odpowiedź, jeśli jest w niej więcej jasności. Miej nadzieję, że zaoszczędzi to trochę czasu.