마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

잠든 화면 깨우기 질문입니다..^^

0 추천

안녕하세요 GCM을 이용한 push 어플을 구현중입니다..!

 

푸시가 왔을 때  서비스가 실행됩니다.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

액티비티 onCreate()에서는 위의 api를 이용하여 죽은 화면을 살리고 액티비티를 실행니다~!

여기서 말하는 액티비티는 뭐.. 카톡이 왔을 때 화면 켜지고 뜨는 알림창있는 까만화면정도라고 생각해주시면 되겠습니다.

WindowManager 를 이용한 위의 API 들은 onCreate() 에서만 사용이 가능한듯 합니다.

그래서 앱이 죽어있는 상태에서는 푸시가 왔을 때 정상적으로

서비스에서 startActivity 를 호출하여 액티비티가 onCreate () 부터 실행되니 화면이 켜지고 정상적으로 푸시알림이 뜨는게 보이는데요.

 

앱이 실행중일때가 문제입니다. 앱이 실행중일 때에도 푸시를 받을 수 있는데

앱은 아직 죽지않고 화면이 꺼져있다면 액티비티가 onPause() 상태 이기 때문에..

푸시를 받은 서비스가 startActivity를 해주어도 onCreate() 로 돌아오지 않아 화면이 켜지지 않는 문제가 생깁니다.

 

카톡 얘네는 앱이 실행중이고 화면이 꺼져있어도 푸시가 오면 화면이 잘 켜지던데 어떻게 한건가요..?

 

찾아보니 wakeLock 을 이용해서 하면 될것같기도 한데

android 에서 말하기를 api 16부터인가 deplicated 됐다고 사용하지 않을 것을 권장하더라구요

그래서 api level 제약에 안걸리는 방법을 좀 알고싶습니다.. ㅎ

 

((앱이 실행중이다. 화면은 꺼져있다. 푸시가 왔을 때 화면을 켜주고 싶다.))

 

아시는 지식좀 나누어주시면 감사하겠습니다..!!

 

 

 

윤둥이 (4,560 포인트) 님이 2013년 8월 21일 질문
윤둥이님이 2013년 8월 22일 수정

1개의 답변

0 추천
푸쉬가 오면 자동으로 앱이 실행되게를 원하시는건가요??

 

그건 가능 할지 잘 모르겠네요. 보안상으로 막혀있을거 같은데..예상하기엔..모바일은 프로세스 첫순위가 통화 프로세스인데

중간 gcm 수신이 되면서 통화중에 다른 어플이 자동 실행된다는건...음..

게다가 gcm 수신 만으로 자동 재실행 되는 어플은 유저 입장에서 달갑지 않을듯...

 

선택 권한 이 있어야겠죠

 

알람 형식. 카톡도 알람 형식으로  위에 notification 을 띄우고 그걸 클릭하면 해당 activity 를 실행시키는 방식일텐데요

이걸 원하시는건지 모르겟네요

 

보통은 gcm 과 notification 을...병행해서 앱을 만드시면 될거 같습니다.
AND chobo (4,690 포인트) 님이 2013년 8월 22일 답변
앱을 실행시키는게 아니라 서비스가 뒤에서 실행되는거죠..ㅎ
그리고 질문의 요지는.. 앱을 띄우는게 아닌 화면을 띄워서
카톡처럼 알림을 주는겁니다..
카톡도 앱 실행중이건 아니건간에 푸시가 오면 화면을 켜주고 새로운 까만 액티비티를 띄워서 거기 alertDialog 를 띄우는걸로 알고있는데요..
notification 을 쓰시면 될거 같은데...이건 써보신건가요? 보통 서비스 gcm 이면 notification 을 사용할텐데...이게 아니면
제가 질문요지를 잘못이해 한거 같네요
글만으로 정확히 이해는 가지 않으나,
Push가 왔을 때 알람이 뜨는 Activity를 single_top으로 놓은 뒤, 서비스에서 알람Activity를 띄울 때 flag_activity_new_task로 띄우면 기존의 앱이 켜져있는 상태나 꺼져있는 상태 등과 상관없이 독립적으로 뜰 것 같습니다. (여러개의 푸쉬가 오는 경우 single_top이기 때문에 한화면내에서 여러번처리가 가능할 듯 하구요)
알림을 띄우는 Activity가 single_top으로 실행되고 destroy되지 않고 살아있을 때 startActivity로 그 알림 activity를 다시호출하면 onCreate가 아닌 onNewIntent()가 호출이 됩니다. onCreate에서 해주던 초기화 작업을 onNewIntent를 오버라이드하여 그 안에서도 적용해주시면 됩니다
...