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

앱의 실행상태에 대해서 질문이 있습니다.

0 추천

지금 gcm을 구현을 하여서

 
앱이 꺼진상태 gcm 메세지가 오게되면 팝업창처럼 켜지는것을 
 
앱이 켜진 상태에서는 밑에 toast를 받으려고 합니다
 
위의 2개 팝업이나 toast는 구현이 완료가 된 상태인데
 
앱이 꺼진상태인지 켜진 상태인지 체크를 하기 위해서 프로세스를 검사하는 것을 사용하여 검사하였으나
gcm을 구현한 상태에서는 앱을 프로세스에 등록을 하게 되어서 앱을 껏다고는 하나 프로세스상에 남아서
꺼진상태인지 켜진상태인지 판단이 불가능해서 질문을 드리게 되었습니다
어떠한 방식으로 접근하면 좋을지 도움의 말씀 부탁드리겠습니다.
Noswind (2,330 포인트) 님이 2014년 8월 12일 질문

1개의 답변

0 추천
 
채택된 답변
ActivityManager로부터 현재 실행되고 있는 톱 액티비티 ComponentName을 가져올 수 있습니다.

그 ComponetName의 패키지네임과 만드신 앱의 패키지네임을 비교하면

현재 앱이 포그라운드에 보여지고 있는중인지 아닌지 판별할 수 있습니다.
b22n (22,940 포인트) 님이 2014년 8월 12일 답변
Noswind님이 2014년 8월 13일 채택됨
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
        ComponentName topActivity = am.getRunningTasks(1).get(0).topActivity;   

        a = topActivity.getClassName();

예 말씀하신대로 topactivity의 값을 가져오려고 하였는데

08-12 11:34:18.172: E/AndroidRuntime(8491): FATAL EXCEPTION: IntentService[GCMIntentService-245795334889-1]
08-12 11:34:18.172: E/AndroidRuntime(8491): Process: co.kr.gmpit.mains, PID: 8491
08-12 11:34:18.172: E/AndroidRuntime(8491): java.lang.SecurityException: Permission Denial: getTasks() from pid=8491, uid=10334 requires android.permission.GET_TASKS
08-12 11:34:18.172: E/AndroidRuntime(8491):     at android.os.Parcel.readException(Parcel.java:1465)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at android.os.Parcel.readException(Parcel.java:1419)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at android.app.ActivityManagerProxy.getTasks(ActivityManagerNative.java:2840)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at android.app.ActivityManager.getRunningTasks(ActivityManager.java:813)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at android.app.ActivityManager.getRunningTasks(ActivityManager.java:849)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at co.kr.gmpit.mains.GCMIntentService.getTopActivity(GCMIntentService.java:214)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at co.kr.gmpit.mains.GCMIntentService.onMessage(GCMIntentService.java:134)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:223)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at android.os.Handler.dispatchMessage(Handler.java:102)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at android.os.Looper.loop(Looper.java:136)
08-12 11:34:18.172: E/AndroidRuntime(8491):     at android.os.HandlerThread.run(HandlerThread.java:61)
라는 에러가 나오는 상황입니다 2번째줄 끊나고 나서 값을 가져올때 에러가 발생하는거 같습니다.
로그 잘 봐보세요.
android.permission.GET_TASKS 퍼미션이 필요합니다.
...