Android:如何在收到新通知时打开屏幕?

时间:2017-06-07 18:26:13

标签: android firebase push-notification firebase-cloud-messaging android-notifications

我已经尝试了几乎所有内容,但在后台模式下收到新通知时,我无法理解如何打开手机屏幕。

我正在使用FCM。当应用程序处于后台时,收到的通知由系统托盘管理。当收到新内容时,如何让系统托盘打开屏幕?谢谢!

2 个答案:

答案 0 :(得分:7)

最后,答案就在这里。

如果您使用Firebase API从服务器向设备发送通知,请记住来自扩展FirebaseMessagingService onMessageReceived()方法仅调用在后台,如果你发送这样的通知:

                        $msg = array
                        (
                            'body'  => $newsObj['description'],
                        );
                        $fields = array
                        (
                            'registration_ids'  => $registrationIds,
                            'data'          => $msg,
                            'priority'  => "high"
                        );

您会看到,如果您将“数据”属性更改为“通知”,则只会调用 onMessageReceived()方法应用程序位于 FOREGROUND

要在收到新通知时启用屏幕,请将以下代码放入 onMessageReceived()方法中:

        // Turn on the screen for notification
        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        boolean result= Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT_WATCH&&powerManager.isInteractive()|| Build.VERSION.SDK_INT< Build.VERSION_CODES.KITKAT_WATCH&&powerManager.isScreenOn();

        if (!result){
            PowerManager.WakeLock wl = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE,"MH24_SCREENLOCK");
            wl.acquire(10000);
            PowerManager.WakeLock wl_cpu = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MH24_SCREENLOCK");
            wl_cpu.acquire(10000);
        }

在AndroidManifest.xml中:

    <uses-permission android:name="android.permission.WAKE_LOCK" />

这就是全部!

答案 1 :(得分:3)

  

试试这个

你必须做一件事,当你显示通知时,你必须广播这个意图。在onMessageReceived(RemoteMessage remoteMessage)扩展课程的FirebaseMessagingService方法中生成通知

Intent in=new Intent(Intent.ACTION_POWER_CONNECTED);
        getActivity().sendBroadcast(in);