2014-11-18 4 views
0

GCM을 사용하는 서버와 통신하는 앱을 만들고 있습니다. 그것은 모두 잘 작동하지만. 나는 다른 안드로이드 장치에 새로운 메시지가 있다는 알림을 보내는 인스턴트 채팅을 구현했습니다. 다른 장치가 noti를 클릭하면 인스턴트 대화방에 들어가 응답하거나 새로 업데이트 된 메시지를 보게됩니다.내 안드로이드 장치가 깨어있는 지 알 수있는 방법

저는 서버의 플래그를 비교하여이 작업을 수행합니다. 메시지가 처음으로 전송되고 앱이나 기기가 잠든 경우 새 채팅방에 연결할 수있는 noti가 생성됩니다. 메시지가 현재 실행중인 대화방의 메시지 인 경우 메시지가 업데이트됩니다.

하지만 쉽게 알 수 있듯이 메시지를받는 장치가 깨어 있지 않으면 아무 것도 할 수 없습니다.

그래서 장치 상태가 새 대화방에서 보낸 메시지인지 아니면 현재 대화방에서 왔는지를 결정하지 못했음을 알리고 싶습니다. 새 장치에서 온 것이면 (장치가 잠자기 상태 일 때) 새로 작성한 대화방으로 연결되는 noti가 표시되며, 현재 대화방에있는 경우에는 대화 로그가 업데이트됩니다.

+0

무엇이 문제인가 보입니까? 확인할 수있는 필드를 업데이트하고 장치 화면을 켤 수있는 브로드 캐스트 수신기를 가질 수 있습니다. – Atrix1987

+0

코드가 실행 중이면 장치가 깨어 있습니다 (화면이 꺼져있을 수도 있음). 서버에 관한 한, 장치가 트래픽을 교환하고 있다면 깨어 있습니다. 그렇지 않으면 (일부 시간 초과 후) 네트워크없이 잠들거나 (일시적으로) - 응용 프로그램 목적에 따라 다를 수 있습니다. –

답변

0

가동 잠금 를 사용 깨어 장치를 유지하는 것입니다. How can I tell if Android app is running in the foreground?

Gadenkan의 답변에 따라, 전 ActivityManager 객체를 만들어 내 앱이 포 그라운드에서 실행되고 있는지 확인합니다.

그래서 포어 그라운드에서 실행되지 않으면 전체 앱이 기본 활동에서 채팅방으로 시작됩니다. 그렇지 않은 경우 브로드 캐스트 수신기에 GCM이 새 메시지를 추가하도록 알립니다.

0

안드로이드 용 PowerManager API를 공부해야한다고 생각합니다. 난 당신이 isInteractive() 또는 isScreenOn()는 화면이 꺼져 있는지 확인하는 (isScreenOn는 API 레벨 20에 사용되지 않습니다 및 isInteractive로 대체) 안드로이드 온의 버전에 따라 방법을 사용할 수 있습니다 무엇을 말할 수에서

PowerManager Link.

하지만 난 장치가 화면이 꺼진 후 절전 모드로 전환 것이라는 보장은 없습니다isScreenOn()를 사용에 대해 알려 드릴 것입니다. 이것은 OEM까지입니다.

은 당신이 할 수있는 최고의 내가이 링크를 따라이 문제를 해결 Wakelock Link

관련 문제