代码之家  ›  专栏  ›  技术社区  ›  coder.john

当设备处于待机状态时,android tv无法接收fcm消息

  •  0
  • coder.john  · 技术社区  · 6 年前

    我们知道,电视没有系统栏,所以我只发送数据信息,当信息应用程序在前台、后台甚至不运行时,它就会工作。但当我按“电源”键(电源即时开启)时,设备将进入待机模式(str standby),我可以保证消息已成功发送:

    {
     "to" : "xxx",
     "collapse_key" : "tv",
     "priority": "high",
     "content_available":true,
     "data" : {
         "body" : "wake up"
     }
    }
    
    {
        "multicast_id": xxx,
        "success": 1,
        "failure": 0,
        "canonical_ids": 0,
        "results": [
            {
                "message_id": "xxx"
            }
        ]
    }
    

    我可以看到日志:

    broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=com.tcl.fcmapp (has extras) }
    

    当电视处于待机状态时,我通过以下方法唤醒设备:

    /**
     * Called when message is received.
     *
     * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
     */
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.d(TAG, "From: " + remoteMessage.getFrom());
    
        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
            wakeUpScreen();
        }
    }
    
    private void wakeUpScreen() {
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        @SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wakeLock = pm.newWakeLock
                (PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "LiveTV");
        wakeLock.setReferenceCounted(false);
        try {
            wakeLock.acquire();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    我读过有关FCM的文档,上面说FCM支持唤醒设备,那么我的使用方式有什么问题吗?

    0 回复  |  直到 6 年前