2011-11-27 7 views
4

사용자 정의 listPreference가 있습니다. 실행할 수있는 응용 프로그램 목록을 표시하고 싶습니다 (CATEGORY_LAUNCHER로 활동 포함). 선택한 항목은 나중에 응용 프로그램을 시작하는 데 사용됩니다. 솔루션 검색을 수행 할 때 목록에는 실행할 수없는 앱도 포함되었습니다. 이것을 좁힐 방법이 있습니까?시작할 수있는 설치된 응용 프로그램의 목록을 가져옵니다.

public class AppSelectorPreference extends ListPreference { 

@Override 
public int findIndexOfValue(String value) { 
    return 0; 
    //return super.findIndexOfValue(value); 
} 

public AppSelectorPreference(Context context, AttributeSet attrs) { 
    super(context,attrs); 

    PackageManager pm = context.getPackageManager(); 
    List<PackageInfo> appListInfo = pm.getInstalledPackages(0); 
    CharSequence[] entries = new CharSequence[appListInfo.size()]; 
    CharSequence[] entryValues = new CharSequence[appListInfo.size()]; 

    try { 
     int i = 0; 
     for (PackageInfo p : appListInfo) { 
      if (p.applicationInfo.uid > 10000) { 
       entries[i] = p.applicationInfo.loadLabel(pm).toString(); 
       entryValues[i] = p.applicationInfo.packageName.toString();    

       i++; 
      }   
     } 
    } catch (Exception e) { 

     e.printStackTrace(); 
    } 

    setEntries(entries); 
    setEntryValues(entryValues); 
} 

} Frazerm63 @

+0

당신이 CATEGORY_LAUNCHER 및 android.intent.action.MAIN과 활동을 포함 할 수있다 이러한 응용 프로그램 패키지 이름의 정렬 목록을 얻을하는 데 도움이 될 것입니다 답변 수에서 할 수 있습니다. – Herry

답변

5

는 해결 :

final Context context = getBaseContext(); 
    final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
    final List<ResolveInfo> pkgAppsList = context.getPackageManager().queryIntentActivities(mainIntent, 0); 
    CharSequence[] entries = new CharSequence[pkgAppsList.size()]; 
    CharSequence[] entryValues = new CharSequence[pkgAppsList.size()]; 

    int i = 0; 
    for (ResolveInfo P : pkgAppsList) { 
     entryValues[i] = (CharSequence) P.getClass().getName(); 
     entries[i] = P.loadLabel(context.getPackageManager()); 
     ++i; 
    }; 
4

난 당신이

Intent localIntent = new Intent("android.intent.action.MAIN", null); 
    localIntent.addCategory("android.intent.category.LAUNCHER"); 
    List localList = localPackageManager.queryIntentActivities(localIntent, 0); 
    Collections.sort(localList, new ResolveInfo.DisplayNameComparator(localPackageManager)); 
당신이 위의 코드에서 패키지 매니저 오브젝트를 통과해야

이 localPackageManager에게 .means 코드에서이 일을 누락 생각

전 사용자 코드에서이 코드를 어떻게 사용할 수 있는지 잘 모르겠지만 일부 카테고리 응용 프로그램에만 필터를 적용하는 데 도움이됩니다.

+0

코드 조각을 살펴보면 목록이 나옵니다. ListPreference의 배열로 변경하려면 어떻게해야합니까? – Frazerm63

+0

수정 : 배열로 변환해서는 안되지만 CharSequence – Frazerm63

+0

@ Frazerm63 그러면 해결할 수 있습니다. 그렇지 않으면 ... – Herry

관련 문제