如何知道我的Android设备是否意识到

如何知道我的Android设备是否意识到,android,google-cloud-messaging,Android,Google Cloud Messaging,我正在构建一个应用程序,它使用GCM与服务器进行一些通信。它除了一个外,一切正常。 我已经实现了一个即时聊天功能,它会向另一个android设备发送通知,告知有新消息。 如果另一台设备点击noti,它将进入即时聊天室进行回复,或者只看到最新更新的消息 我通过比较来自服务器的标志来实现这一点;如果消息是第一个发送的,并且应用程序或设备正在休眠,它将生成一个noti,可以链接到新的聊天室。 如果消息来自当前正在运行的聊天室,它只会更新消息 但是,正如您很容易看到的,如果接收消息的设备没有唤醒,它将无

我正在构建一个应用程序,它使用GCM与服务器进行一些通信。它除了一个外,一切正常。 我已经实现了一个即时聊天功能,它会向另一个android设备发送通知,告知有新消息。 如果另一台设备点击noti,它将进入即时聊天室进行回复,或者只看到最新更新的消息

我通过比较来自服务器的标志来实现这一点;如果消息是第一个发送的,并且应用程序或设备正在休眠,它将生成一个noti,可以链接到新的聊天室。 如果消息来自当前正在运行的聊天室,它只会更新消息

但是,正如您很容易看到的,如果接收消息的设备没有唤醒,它将无法执行任何操作

因此,我想知道设备状态是否为唤醒状态,以确定消息是来自新聊天室还是来自当前聊天室。
如果它来自一个新的聊天室(当设备处于睡眠状态时),它将显示一个noti,这将导致新创建的聊天室,如果它来自当前聊天室,它将只更新聊天日志

我认为您需要学习适用于android的PowerManager API。

据我所知,您可以使用
isInteractive()
isScreenOn()
方法检查屏幕是否关闭,具体取决于您使用的android版本(isScreenOn在API级别20中被弃用,并被isInteractive取代)

但我建议不要使用
isScreenOn()
屏幕关闭后,无法保证设备会进入睡眠状态。这取决于OEM

您最好使用Wakelock保持设备处于唤醒状态

我通过以下链接解决了这个问题。

根据Gadenkan的回答,我制作了一个activityManager对象来检查我的应用程序是否在前台运行

因此,如果它不是在前台运行,它将调用整个应用程序,从主要活动开始到聊天室。
如果没有,它只会告诉broadcastlistener通过GCM附加新消息

有什么问题吗?您可以关闭和打开设备屏幕的广播接收器,并更新一个字段,您可以检查代码是否正在执行,设备是否处于唤醒状态(尽管屏幕可能已关闭)。就您的服务器而言,如果设备正在交换流量,则它处于唤醒状态。如果它不是(在一段超时之后),那么它要么处于休眠状态,要么(暂时?)没有网络,这对于应用程序来说可能没有什么不同。