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

PackageManger.getActivityIcon(ComponentName ActivityName) 질문

0 추천

안녕하세요 초보 개발자입니다.

저번에 두서없이 질문을 드렸었네요.

 

간단한 바로가기 기능들을 구현하려고 하고있습니다. 홈런처처럼요.

 

코드는 다음과 같습니다. 

(ComponentName ActivityName) 을 제대로 넣은건지 사실 모르겠습니다.

 

private List<ResolveInfo> apps;
private PackageManager pm;
 
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
 
pm = getPackageManager();
apps = pm.queryIntentActivities(mainIntent, 0);
ResolveInfo info = apps.get(position);
 
 
 
pn =  info.activityInfo.packageName
 
na = info.activityInfo.name
 
 
imageView.setImageDrawable(pm.getActivityIcon(new ComponentName(pn, na)));

오류가 나는 부분은 getActivityIcon 부분입니다. NullPointerException이 나면서 에러코드가 여러개가 뜨는 상황이라 정확한 에러는 모르겠습니다만 getActivityIcon쪽에서 나는건 확실합니다.

코드를 저렇게 쓴 이유는 packageName과 name을 DB에 저장했다가 불러오기 때문입니다. imageView는 사실 다른 액티비티에 존재하고 DB에서 뽑아온 packageName과 name을 이용해서 아이콘을 로드할려고 하는데 안되네요.

패키지명만 이용해서 아이콘을 뽑아와보니 연락처랑 통화, 통화기록이 겹치는 문제들이 발생해서 저렇게 이용하려고 하고 있습니다.

액티비티아이콘을 로드할수 있는 다른 방법을 알려주셔도 감사하겠습니다.

해결책을 못찾고 있어서 이미지도 DB에 저장하려고 생각중에 있습니다.

익명사용자 님이 2015년 2월 15일 질문

1개의 답변

0 추천
/**
         * 어플리케이션 리스트 작성
         */
        public void rebuild() {
            if (mAppList == null) {

                Log.d(TAG, "Is Empty Application List");
                // 패키지 매니저 취득
                pm = getPackageManager();

                // 설치된 어플리케이션 취득
                mAppList = pm
                        .getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES
                                | PackageManager.GET_DISABLED_COMPONENTS);
            }

            AppFilter filter;
            switch (MENU_MODE) {
            case MENU_DOWNLOAD:
                filter = AppInfo.THIRD_PARTY_FILTER;
                break;
            default:
                filter = null;
                break;
            }

            if (filter != null) {
                filter.init();
            }

            // 기존 데이터 초기화
            mListData.clear();

            AppInfo addInfo = null;
            ApplicationInfo info = null;
            for (ApplicationInfo app : mAppList) {
                info = app;

                if (filter == null || filter.filterApp(info)) {
                    // 필터된 데이터

                    addInfo = new AppInfo();
                    // App Icon
                    addInfo.mIcon = app.loadIcon(pm);
                    // App Name
                    addInfo.mAppNaem = app.loadLabel(pm).toString();
                    // App Package Name
                    addInfo.mAppPackge = app.packageName;
                    mListData.add(addInfo);
                }
            }

            // 알파벳 이름으로 소트(한글, 영어)
            Collections.sort(mListData, AppInfo.ALPHA_COMPARATOR);
        }
    }
nicehee (73,100 포인트) 님이 2015년 2월 15일 답변
...