Android屏幕锁定时未调用BroadcastReceiver

Android屏幕锁定时未调用BroadcastReceiver,android,push-notification,broadcastreceiver,google-cloud-messaging,Android,Push Notification,Broadcastreceiver,Google Cloud Messaging,在我的应用程序中,当通知到达时,如果屏幕被锁定,则不会调用BroadcastReceiver。 但当屏幕解锁时,将调用广播接收器,并显示通知 我还将以下权限放入我的清单中: android.permission.WAKE_LOCK 但仍然不起作用。以下是适用于我的代码: NotificationManager mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); Notification

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

我还将以下权限放入我的清单中:

android.permission.WAKE_LOCK

但仍然不起作用。

以下是适用于我的代码:

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);

确保在空闲=0时从服务器发送带有延迟的通知(这是默认值),否则在设备唤醒之前GCM不会发送通知。

打开要从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);

请确保在设置ContentView(..:-)之前没有粘贴它。

这取决于您如何启动广播接收器以及您在
onReceive()上的设置。
您可能需要一个唤醒锁。您使用的是alarm manager吗?@Tarun no,由C2DM com.google.android.C2DM.intent.receive调用的广播接收器我在没有额外代码的情况下工作了,这是因为在我的服务器中,当空闲时,
delay\u设置为true。