Я получаю входящее уведомление 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
);