2012-02-17 5 views
0

Я tryng превратить proximitywakelock о том, когда портрет и выключаться, когда пейзаж, используя этот код, но он всегда остается активным:Как выключить wakelock?

//in onCreate() of my Activity 

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    mProximityWakeLock = pm.newWakeLock(32, ""); // proximity_wake_lock=32 
    mProximityWakeLock.setReferenceCounted(false); 

    if (getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "non landascape", Toast.LENGTH_SHORT).show(); 

     if (!mProximityWakeLock.isHeld()) { 
      mProximityWakeLock.acquire(); 
      Toast.makeText(this, "acquired", Toast.LENGTH_SHORT).show(); 
     } 

     if (!mProximityWakeLock.isHeld()) 
      Toast.makeText(this, "not held", Toast.LENGTH_SHORT).show(); 
     else 
      Toast.makeText(this, " held", Toast.LENGTH_SHORT).show(); 

    } else { 

     if (!mProximityWakeLock.isHeld()) 
      Toast.makeText(this, "not held", Toast.LENGTH_SHORT).show(); 
     else 
      Toast.makeText(this, " held", Toast.LENGTH_SHORT).show(); 

     Toast.makeText(this, "landascape", Toast.LENGTH_SHORT).show(); 

     if (mProximityWakeLock.isHeld()) { 
      mProximityWakeLock.release(); 
      Toast.makeText(this, "released", Toast.LENGTH_SHORT).show(); 
     } 

    } 

Похоже, он никогда не держал, когда на пейзаж ... Как isHeld() действительно работает? В чем проблема с кодом?

+0

Это звучит так, как будто вам нужно объявить что-то о wakelock в файле манифеста, тоже – jap1968

+0

Уже существует

ответ

0

Похоже, вы создаете новый wakelock каждый раз, когда вы поворачиваете экран, и новый wakelock не удерживается.

Если вы посмотрите в журналах, вы можете увидеть что-то о утечке wakelocks.

+0

Почему вы так говорите? Создание объекта Wakelock находится вне (до) проверки ориентации. –

+0

@Deleted Я говорю, что вы создаете новый wakeLock каждый раз, когда экран поворачивается. Но вы когда-нибудь выпускаете старый? Например. в 'onDestroy()' (может быть, это не лучшее место, поскольку он не гарантирует, что вас будут называть, но вы, надеюсь, понимаете, что я имею в виду). – tidbeck