총 게시물 38,593건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

topactivity name 구하는 방법

글쓴이 : 에찌 날짜 : 2017-04-17 (월) 09:30 조회 : 895
글주소 : http://www.androidside.com/B49/167006
 
  개똥이네 롤리팝
롤리팝전문 판매, 개념없는 가격, 3천여 업체 가격비교
www.littlemom.co.kr/
  로라로라 로라랜드 런칭
일상에서, 비치에서, 운동할 때! 어디서든 빛이나는 스타일, 더 핫해진 로라로라
www.rolarola.com
  취향저격하는 썸머룩, 난닝구
더위를 잊게해줄 난닝구 썸머룩, 여름에도 취향저격 신상 할인, 롯데백화점 입점
www.naning9.com
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang

롤리팝 API 21 버전 부터는 getRunnningTasks 가 deprecated가 되었더군요
심지어 퍼미션 GET_TASKS 도 deprecated가 되었구요

기존에는
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
List<ActivityManager.RunningTaskInfo> info = manager.getRunningTasks(1);
ComponentName cn = info.get(0).topActivity;
activityName = cn.getShortClassName().substring(1);
Logger.d("b activityName : " + activityName);
} else {

}

위와 같은 방식으로 탑 액티비티의 이름을 가져올 수 있었지만
API 21 부터는 어떻게 가져와야할 지 모르겠습니다.

대부분 탑 프로세스네임을 가져오는 방법만 보여주더군요.

앱 네임말고 특정 앱에서 최상위 액티비티네임은 어떻게 가져올 수 있을까요
( 특정 static class 에 액티비티가 create 될 때마다 등록을 해줘야하는 걸까요?)






질문자가 자신의 포인트 5 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 4을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

뉴키 2017-04-17 (월) 10:45
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //For versions less than lollipop
            ActivityManager am = ((ActivityManager) getSystemService(ACTIVITY_SERVICE));
            List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(5);
            top = taskInfo.get(0).topActivity.getPackageName();
            Log.v(TAG, "top app = " + top);
        }else{ //For versions Lollipop and above
            List<AndroidAppProcess> processes = ProcessManager.getRunningForegroundApps(getApplicationContext());
            Collections.sort(processes, new ProcessManager.ProcessComparator());
            for (int i = 0; i <=processes.size()-1 ; i++) {
                if(processes.get(i).name.equalsIgnoreCase("com.google.android.gms")) { //always the package name above/below this package is the top app
                    if ((i+1)<=processes.size()-1) { //If processes.get(i+1) available, then that app is the top app
                        top = processes.get(i + 1).name;
                    } else if (i!=0) { //If the last package name is "com.google.android.gms" then the package name above this is the top app
                        top = processes.get(i - 1).name;
                    } else{
                        if (i == processes.size()-1) { //If only one package name available
                            top = processes.get(i).name;
                        }
                    }
                    Log.v(TAG, "top app = " + top);
                }
            }
        }


검증은 안해봤습니다.
댓글주소 추천 0 반대 0
     
     
에찌 2017-04-17 (월) 15:04
[@뉴키]
stackoverflow에서 봤던 내용인데 비슷한 방식으로 해서 해보니깐 프로세스네임은 가져오는데 액티비티 네임은 안가져오드라구염..
해당 소스로는 Cannot resolve symbol 'AndroidAppProcess' 라고 출력이 되구여..

댓글주소 추천 0 반대 0
          
          
뉴키 2017-04-17 (월) 16:50
[@에찌]
AndroidAppProcess 는 외부 라이브러리입니다.
혹시나 해서 돌려봤는데 되는데용;
댓글주소 추천 0 반대 0
               
               
에찌 2017-04-17 (월) 17:59
[@뉴키] 감사합니다. 외부라이브러리만 아니면 사용하고 싶은데 아쉽네요..;; (해당 링크들어가서 소스 봐도 잘 모르겠다는...)
댓글주소 추천 0 반대 0
                    
                    
안사드 2017-04-18 (화) 10:45
[@에찌]
https://github.com/jaredrummler/AndroidProcesses/blob/master/library/src/main/java/com/jaredrummler/android/processes/AndroidProcesses.java
여기꺼 그냥 빼서 사용하면 될듯한데요.
댓글주소 추천 0 반대 0
                         
                         
에찌 2017-04-18 (화) 11:23
[@안사드]
저두 그렇게 생각하고 해당 getRunningForegroundApps 메소드부분 찾아서 할려고했드만 결국에는 AndroidAppProcess 클래스를 가져와야하드라구염.. 가져와서 사용하려면 할 수는 있을 거같은데 최소한의 소스로 구동해보려고 하구있어여 ㅎ..
기존에 있던 getRunningTasks를 왜 deprecated를 시켰는지..나원..ㅋㅋ..
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기