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

topactivity name 구하는 방법

글쓴이 : 에찌 날짜 : 2017-04-17 (월) 09:30 조회 : 604
글주소 : http://www.androidside.com/B49/167006
 
  롤리팝가격비교 개똥이네
롤리팝세계문화, 개똥이네, 각출판사 중고전집 가격비교, 새책덤핑, 전집고가매입
www.littlemom.co.kr/
  봄바람이 살랑이는 난닝구
설레는 봄바람 같은 스타일, 당신의 봄을 위한 데일리룩, 롯데백화점 입점.
www.naning9.com
  롤리팝 우주사탕 스몰리
롤리팝, 우주사탕, 플래닛롤리팝, 왕사탕, 발렌타인데이 사탕선물, 사탕선물박스
www.smally.co.kr
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. 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 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기