2011-11-27 116 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); 
} 

}

+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

@ Frazerm63我認爲你缺少這個東西在你的代碼

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)); 

你必須通過你的PackageManager對象在上面的代碼中.means這localPackageManager

我不太瞭解如何在用戶代碼中使用它,但這將有助於讓您想法僅過濾某些類別應用程序。

+0

查看一段代碼,這會給我一個列表。我將如何將其改爲ListPreference的數組? – Frazerm63

+0

糾錯:它不應該轉換爲數組,但CharSequence – Frazerm63

+0

@ Frazerm63所以你得到解決它..或保持... – Herry

相關問題