在Android中屏幕锁定时未调用BroadcastReceiver

时间:2013-08-28 07:21:55

标签: android push-notification broadcastreceiver google-cloud-messaging

在我的应用程序中,当通知到达时,如果屏幕被锁定,则不会调用BroadcastReceiver。 但是当屏幕解锁时,会调用BroadcastReceiver并显示通知。

我还在我的清单中添加了以下权限:

android.permission.WAKE_LOCK

但仍然没有工作。

2 个答案:

答案 0 :(得分:15)

以下是适用于我的代码:

NotificationManager mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(...);
...
mManager.notify(0, notification);
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
wl.acquire(15000);

确保您使用delay_while_idle=0(这是默认值)从服务器发送通知,或者在您的设备唤醒之前GCM不会发送通知。

答案 1 :(得分:1)

打开要从BroadCastReceiver的onReceive(....)开始的活动A.将其粘贴到活动A的onCreate()

 final Window win= getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
          WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
           WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

确保在setContentView(....)之前没有粘贴它: - )