2010-11-23 6 views
9

これは私のシナリオです。私はbackgoundサウンドを再生しているアプリがあります。 BroadcastReceiverを使用して、ディスプレイがオフになったことを知ることができます。その後、サウンドを消去します。私はまた、画面が再びオンになったかどうかを知ることができます。しかし、デバイスがロック状態にある場合、私はオーディオを開始したくありません。したがって、私はACTION_USER_PRESENTインテントが信号を送るのを待つ。これはすべて機能しますが、ユーザーが電源を切った後すぐに画面を戻すと、ロック画面やACTION_USER_PRESENTメッセージは表示されません。それで、画面が再びオンになったとき、デバイスがロックされているかどうか、私が眠っているかどうかを推測する方法はありますか?デバイスが眠っているかどうかを確認する方法

+0

デバイスが実際にスリープしている場合、アプリケーションプロセッサはコードを実行していません。 画面がロックされている部分があります。 –

+1

十分に公正。では、画面がロックされているかどうかを確認する方法は? – iterator

+0

http://stackoverflow.com/questions/3170563/android-detect-phone-lock-event –

答えて

9

KeyguardManagerを試して、デバイスがロックされているかどうかを確認できます。ここにいくつかのコードがあります(自分で試したことはありません):

KeyguardManager kgMgr = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
boolean showing = kgMgr.inKeyguardRestrictedInputMode(); 

幸運!

+1

私は試みましたが、画面がロックされているかどうかにかかわらず、「表示中」がfalseを返しました。 – iterator

+0

これは私のために非常にうまくいった。ありがとうございました! – Chris

+0

それは私のために働いてくれてありがとう –

12
((PowerManager) getSystemService(Context.POWER_SERVICE)).isScreenOn() 
0
((PowerManager) getSystemService(Context.POWER_SERVICE)).isScreenOn() 

画面がオンになっている場合は通知します。したがって、画面がオンになっていてもデバイスがロックされている場合はtrueになります。 代わりに、

inKeyguardRestrictedInputMode() 

は、デバイスがロックされている場合にtrueになります。

関連する問題