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。