10

scenario specifico per evitare problemi:
Comportamento per attività in dispositivi Samsung era diverso nel modo che ogni volta che c'è stato un cambiamento rilevato, per la vicinanza, si è tradotto in una chiamata a onPause()/onResume() SOLO su dispositivi SAMSUNG.Android problema sensore di prossimità solo in dispositivi Samsung

Stavo cancellando i sensori di prossimità in onPause() che hanno provocato un comportamento esclusivo dei dispositivi Samsung.

Spero che questo consenta di risparmiare tempo a chiunque si trovi ad affrontare questo problema. Ho rimosso la chiamata di clearing proximity listers da onPause() e ora funziona come previsto sui dispositivi citati.

UPDATE:

Quanto esposto di seguito non è l'unico problema, il sensore di prossimità non sempre comportarsi in questo modo. L'altro problema è un L-o-c:

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

a caso, i if() riporta false per i dispositivi citati quindi mWakeLock.acquire() non è sempre chiamato.

informazioni eventualmente rilevanti:

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

dove

field = PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK or 32 

Il mio codice sensore di prossimità funziona correttamente solo su
1. Samsung GT-I9082 Android 4.2.2 (API 17) [duos grand]
2. Samsung SM-G925I Android 5.1.1 (API 22) [bordo s6]

codice:

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

il problema: valori archiviati restituiti dal sensore di prossimità su entrambi i dispositivi fluttuano, anche mentre poniamo una mano telefoni costantemente per pochi secondi; 10-15 senza spostarlo.
Come:
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: i valori di fluttuazione si differenziano per 0.0 e 5.0 a differenza di 8,0 sopra

  • Cosa ci sono altri modi o permutazione-combinazioni che possono essere applicato con successo e con precisione per risolvere questo problema?

  • A causa di diversi sensori; Sensore di prossimità GP2A e APDS-9930/QPDS-T930 Proximity & Luce?

hanno già speso un bel po 'di tempo sulla it..in invano

+0

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

+0

l'accuratezza non è un mio problema, o la domanda è stata frainteso o non capisco cosa vuoi dire, puoi elaborare – user2450263

+0

Penso che sia oltre 1 bit di valore il significato del sensore di prossimità è fino all'ODM quindi il fatto che il valore varia mentre coperto/scoperto significa solo che è un dettaglio di implementazione e non un comportamento "errato". –

risposta

2

Così si rivela che questo è un problema raccomandata con dispositivi Samsung, ecco una raccolta di pagine che potrebbero aiutare chiunque di fronte a questa:

  1. Utilizzare onWindowFocusChanged. Questo ha avuto senso per me e la mia implementazione relativa a onPause() ha avuto successo nel seguire lo stesso.
    Origine e spiegazione: activity-onpause-to-handle-focus
    Cosa mi ha aiutato: anziché in onPause();

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

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

  3. Più di riferimento:
    Dal punto di vista del tutto diverso, Bug su annullare la registrazione ... bus Otto .. citazione: For us, this only appears on Samsung devices. And after a quick search,...

Si prega di modificare, correggere , migliora la risposta se c'è più chiarezza .. spero che ti salvi un po 'di tempo.