画面がロックされているときに、C2DM の着信通知を受信しています。アクティビティを使用して画面を起動し、ロック画面の上に通知メッセージを表示したいと思います。次のように、C2DM BroadcastReceiver から通知アクティビティを起動しています。
Intent new_intent= new Intent().setClass( context, EIAlertDialog.class );
new_intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
new_intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
context.startActivity( new_intent );
通知アクティビティの onCreate メソッド内で、次のように画面を起動します。
PowerManager powerManager= (PowerManager)getSystemService( Context.POWER_SERVICE );
if (!powerManager.isScreenOn()) {
mWakeLock= powerManager.newWakeLock(
PowerManager.FULL_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP,
"My Tag" )
mWakeLock.acquire();
}
画面は起動しますが、画面のロックを解除するまでアクティビティの通知は表示されません。
以下のコードでロック画面を回避できることはわかっていますが、それは望ましくありません。ユーザーが通知を読んだり応答したりすることに興味がある場合にのみ、ユーザーに電話のロックを解除してもらいたいです。
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
);