获取可以启动的已安装应用程序的列表

Fra*_*m63 4 android

我有一个自定义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);
}
Run Code Online (Sandbox Code Playgroud)

}

Fra*_*m63 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;
    };
Run Code Online (Sandbox Code Playgroud)