10

Özgül senaryo: Samsung cihazlarında Aktivitesi
Davranışı yakınlık için tespit edilen bir değişiklik, her zaman yoktu şekilde farklıydı, o bir çağrı sonuçlandı SADECE SAMSUNG cihazlarda onPause()/onResume().Android yakınlık sensörü sorunu

Yakınlık sensörlerini onPause() numaralı telefondan temizledim, bu da Samsung cihazlarına özgü bir davranışla sonuçlandı. Umarım bu durumla karşılaşan herkes için biraz zaman kazanırsınız. Ben onPause() dan yakınlık dinleyicileri temizleme çağrı kaldırıldı ve şimdi belirtilen cihazlarda beklendiği gibi çalışır.

GÜNCELLEME: Ne aşağıda belirtilen tek sorun değil

, yakınlık sensörü sürekli o şekilde davranmaz.

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

rasgele, söz konusu cihazlar için yanlış if() döner dolayısıyla mWakeLock.acquire() her zaman adı değildir: diğer bir sorun, bir L-o-c.

olasılıkla ilgili bilgi:

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

field = PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK or 32 

Benim yakınlık sensörü kodu yanlış sadece üzerinde
1. Samsung GT-I9082 Android 4.2.2 (API işleri 17) [duos grand]
2. Samsung SM-G925I Android 5.1.1 (API) 22) [s6 kenar]

kodu:

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

sorun: Kayıtlı değerler, telefonlar üzerinde elini bile, dalgalanma her iki cihaz yakınlık sensörü tarafından döndürülen sürekli birkaç saniye için; 10-15 hareket etmeden.
gibi:
Samsung 6 kenarla

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: dalgalanma değerlerini başka yollar olabilmektedir ya da permütasyon-kombinasyonları bulunmaktadır ne

  • üzerinde 8.0 aksine 5.0, 0.0 farklıdır ve Bu sorunu çözmek için başarıyla ve doğru uygulandı mı?

  • Farklı sensörler yüzünden mi? GP2A Yakınlık Sensörü ve APDS-9930/QPDS-T930 Yakınlık & Işık?

  • zaten oldukça uzun bir zaman geçirdim

it..in

+0

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

+0

doğruluk benim sorunum değil, ya sorun yanlış anlaşılmış ya da ne söylemek istediğinizi anlamadım, – user2450263

+0

detaylandırır mısınız? 1 bit değerinin ötesinde yakınlık sensörünün anlamının ODM'ye kadar olduğunu düşünüyorum, bu yüzden değerin örtülü/açıkken değeri değiştiği anlamına gelir. Onun bir uygulama detayı ve 'yanlış' davranış değil. –

cevap

2

Yani bu burada, Samsung cihazlarıyla tescilli konudur bu bakan kimseyi yardımcı olabilecek sayfaları topluluğudur çıkıyor boşuna:

  1. onWindowFocusChanged'u kullanın. Bu benim için anlamlı oldu ve onPause() ile ilgili benim uygulama aynı takiben başarılı oldu.
    Kaynak ve Açıklama: activity-onpause-to-handle-focus
    Ne bana yardımcı oldu: onPause() yerine;

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

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

  3. Daha referans: oldukça farklı yönü, unregister üzerinde Bug ... Otto otobüsü itibaren
    .. alıntı: For us, this only appears on Samsung devices. And after a quick search,...

düzenleyin, doğru , daha fazla açıklık varsa cevabı geliştirin .. umarım biraz zaman kazandırır.