2011-12-31 12 views
0

を理解するのを手伝っていますので、電話がスリープ状態にならないようにPowerManagerを調べています。Android PowerManagerとWakelockは、私が

つの質問:

1)私の電話が現在のX秒後にディスプレイの電源を切るように設定され、PowerManager.Wakelock機能はこれを上書きしますか?

2)携帯電話には、ディスプレイの電源を切る、または電話を切るために使用できるトップボタンがあります。 PowerManager.WakeLockもこの機能を無効にしますか?

洞察力は、私はよく分からないが、私はそうは思わ

答えて

1
  1. を高く評価しました。そして、私がこの の機能をソースで見つけるのは難しいです。
  2. PowerManager.javaのgoToSleep(時間)に関数があります。この 機能は、単にPowerManagerService goToSleepLo​​ckedのメソッドを呼び出します。

    private void goToSleepLocked(long time, int reason) { 
    
    if (mLastEventTime <= time) { 
    mLastEventTime = time; 
    // cancel all of the wake locks 
    mWakeLockState = SCREEN_OFF; 
    int N = mLocks.size(); 
    int numCleared = 0; 
    boolean proxLock = false; 
    
    for (int i=0; i<N; i++) { 
        WakeLock wl = mLocks.get(i); 
        if (isScreenLock(wl.flags)) { 
         if (((wl.flags & LOCK_MASK) == PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) 
          && reason == WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR) { 
         proxLock = true; 
         } else { 
          mLocks.get(i).activated = false; 
          numCleared++; 
         } 
        } 
    } 
    if (!proxLock) { 
        mProxIgnoredBecauseScreenTurnedOff = true; 
        if (mDebugProximitySensor) { 
         Slog.d(TAG, "setting mProxIgnoredBecauseScreenTurnedOff"); 
        } 
    } 
    EventLog.writeEvent(EventLogTags.POWER_SLEEP_REQUESTED, numCleared); 
    mStillNeedSleepNotification = true; 
    mUserState = SCREEN_OFF; 
    setPowerState(SCREEN_OFF, false, reason); 
    cancelTimerLocked(); 
    } 
    } 
    

ですから、すべてのwakelocksが、この方法ではshutdownedされていることがわかります。

メソッドgoToSleepは、(署名のアクセス許可で保護された)システムコンポーネントによってのみ呼び出すことができます。そして私はそれがあなたの電源ボタンのプレス中に呼び出されると思います。それで、すべてのwakelocksを書き換えます。

1

1)はい、もちろんです!画面がONのときにWAKELOCKを取得すると、画面のタイムアウト後も画面はONのままです。画面がOFFでONにしたい場合は、このようなWakelockインスタンスを作成して取得する必要があります。

PowerManager.WakeLock wl = pm.newWakeLock(
    PowerManager.SCREEN_DIM_WAKE_LOCK 
    | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG); 
    wl.acquire(); 

これで画面が強制的にオンになります。

2)この機能を無効にすることはできません。私はYuryに同意しませんが、トップボタンは単に画面をオフにしてgoToSleep(長時間)メソッドを呼び出さないことです。したがって、デバイスをシャットダウンしない限り、部分ワークロックをリリースしません。

関連する問題