4

В моем приложении, когда приходит уведомление, BroadcastReceiver не вызывается, если экран заблокирован. Но когда экран разблокирован, вызывается BroadcastReceiver и отображает уведомление.BroadcastReceiver не вызывается, когда экран заблокирован в Android

Я также поставил следующее разрешение в моем манифесте:

android.permission.WAKE_LOCK 

Но до сих пор не работает.

+0

В зависимости от того, как вы начнете BroadcastReceiver и то, что вам на 'OnReceive() 'вам может понадобиться блокировка пробуждения –

+0

Вы используете диспетчер аварийных сигналов? – Tarun

+0

@Tarun no, широковещательный приемник, вызываемый C2DM com.google.android.c2dm.intent.RECEIVE –

ответ

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

thats right На самом деле проблема с сервера спасибо –

+1

Я получил его без дополнительного кода, это было вызвано 'delay_while_idle' значением true на моем сервере. – Piovezan

0

Открыть мероприятие A, которое вы хотите начать с onReceive (....) BroadCastReceiver. Вставить это в 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 (....) :-)

Смежные вопросы