2012-04-27 13 views
7

受信したBluetoothデータを継続的に処理しているため、私の活動は部分的なスリープ解除ロックで実行されます。ウェイクロックは次のように設定されています。部分的なスリープ解除中に画面を表示する方法

powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); 
    wakeLock.acquire(); 

特定のイベントが発生すると、ユーザーはステータスを表示できるようになります。私はディスプレイが自動的にオンになり、ユーザーのキー押下ではないようにしたい。 これを行う試みはすべて失敗しました。 部分的なウェイクロックで実行中にディスプレイがオフになると、ディスプレイを元に戻して現在のアクティビティをユーザーに表示させようとする試みが失敗しました。ウィンドウの

PowerManager NewPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    NewPowerManager.userActivity(1, false); 

設定フラグ:

Window win = getWindow(); 
    win.setFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

とにもウェイクロックを解除して、画面をオンにする必要があるという別の開始:

if (wakeLock != null) 
    { 
     wakeLock.release(); // release the wakelock 
    } 
PowerManager.WakeLock TempWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | 
    PowerManager.ACQUIRE_CAUSES_WAKEUP, "TempWakeLock"); 
    // tried | PowerManager.ON_AFTER_RELEASE to no avail 
    TempWakeLock.acquire(); 

私は、ユーザーの活動を偽造しようとしています私がここで紛失しているものがありますか?私は新しい活動を開始しようとしているのではなく、自分の現在の活動をユーザーに表示するだけです。 誰かがこれを行うことができましたか? お手伝いいただき、ありがとうございます。

答えて

9

HTCでLanceのデモコードを見てから、この問題を解決できました(ありがとうございました)。

シークレットは、ACQUIRE_CAUSES_WAKEUPが設定された状態で追加のフルウェイクロックを作成するように思われます。元の部分的なウェイクロックは解除しませんが、ディスプレイをオンにしたいときは、新しいフルウェークロックを作成してから、新しいフルウェイクロックを解除してください。これは実際に動作します!

PowerManager TempPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock TempWakeLock = TempPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | 
PowerManager.ON_AFTER_RELEASE, "TempWakeLock"); 
TempWakeLock.acquire(); 

// do the work that needs the visible display... 

// Release the newest wakelock and fall back to the old one 
TempWakeLock.release(); 
関連する問題