我正在构建一个使用GCM与服务器进行某些通信的应用程序。它工作得很好,但一个。 我已经实现了即时聊天功能,可以向其他Android设备发送通知,告知有新消息。 如果其他设备点击了noti,它将进入即时聊天室进行回复,或者只看到新更新的消息。
我通过比较服务器的标志来做到这一点;如果消息是第一个发送消息并且应用或设备正在休眠,它将创建一个可以链接到新聊天室的消息。 如果消息来自当前正在运行的聊天室,则只会更新它。
但是你可以很容易地看到,如果收到消息的设备没有醒来,它就无法做任何事情。
所以我想知道设备状态是否清醒,不确定消息是来自新的聊天室,还是来自当前的聊天室。 如果它来自一个新设备(当设备正在休眠时),它将显示一个noti,它将通向新建的聊天室,如果它来自当前的聊天室,它将只是更新聊天记录。
答案 0 :(得分:0)
我认为您需要为Android学习PowerManager API。 PowerManager Link
据我所知,你可以使用方法isInteractive()
或isScreenOn()
,具体取决于你所使用的android版本(isScreenOn在API级别20中被弃用并被isInteractive取代)来检查屏幕关闭。
但我建议不要使用 isScreenOn()
,无法保证设备在屏幕关闭后进入休眠状态。这取决于OEM 。
您可以做的最好的事情就是使用Wakelock让设备保持清醒状态 Wakelock Link
答案 1 :(得分:0)
我通过以下链接解决了这个问题。 How can I tell if Android app is running in the foreground?
通过Gadenkan的回答,我创建了一个activityManager对象来检查我的应用程序是否在前台运行。
因此,如果它没有在前台运行,它将调用整个应用程序从主活动开始到聊天室。 如果没有,它将告诉broadcastlistener由GCM附加新消息。