Я получаю входящее уведомление C2DM, когда экран заблокирован. Я хотел бы проснуться на экране и отобразить сообщение уведомления поверх экрана блокировки с помощью Activity. Я запускаю уведомление из моего 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 );
и в методе Activity 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
);