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
Vedi: http://stackoverflow.com/questions/33405259/why-sensors-value-is-different-in-different-android-devices/33405362#33405362 –
l'accuratezza non è un mio problema, o la domanda è stata frainteso o non capisco cosa vuoi dire, puoi elaborare – user2450263
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". –