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

Posted

技术标签:

【中文标题】在Android中锁定屏幕时未调用BroadcastReceiver【英文标题】:BroadcastReceiver not called when screen locked in Android 【发布时间】:2013-08-28 07:21:54 【问题描述】:

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

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

android.permission.WAKE_LOCK

但还是不行。

【问题讨论】:

根据您启动广播接收器的方式以及您在onReceive() 上的内容,您可能需要唤醒锁定 你在使用报警管理器吗? @Tarun no ,由 C2DM com.google.android.c2dm.intent.RECEIVE 调用的广播接收器 【参考方案1】:

这是适合我的代码:

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 不会发送通知。

【讨论】:

我在没有额外代码的情况下让它工作,这是由于我的服务器中的 delay_while_idle 设置为 true。【参考方案2】:

从BroadCastReceiver 的onReceive(....) 打开要启动的Activity A。将此粘贴到Activity 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(....) 之前粘贴它:-)

【讨论】:

以上是关于在Android中锁定屏幕时未调用BroadcastReceiver的主要内容,如果未能解决你的问题,请参考以下文章

打开应用程序并锁定屏幕时未收到 Ionic FCM 推送通知,除非被点击

在Android N多窗口模式下按下主页按钮时未调用Activity onStop()

返回屏幕时未在 React Native 中调用 useEffect

微信wx.getLocation方法,锁定android屏幕

关闭屏幕时未调用 UICollectionView performBatchUpdates 完成

从概览屏幕恢复应用时未调用 onActivityResult(最近)