Android 如何获取应用程序图标?

Android 如何获取应用程序图标?,android,listview,android-package-managers,Android,Listview,Android Package Managers,我正在尝试使用所有已安装应用程序的名称、权限和图标创建一个应用程序。 第一次和第二次我都做得很成功,但第三次我不知道该怎么办 这里是AppsAdapter类: class AppsAdapter extends BaseAdapter { private final Context mContext; private List<Pair<String, List<String>>> mAppsWithPermission; public AppsAdapt

我正在尝试使用所有已安装应用程序的名称、权限和图标创建一个应用程序。 第一次和第二次我都做得很成功,但第三次我不知道该怎么办

这里是AppsAdapter类:

class AppsAdapter extends BaseAdapter {

private final Context mContext;
private List<Pair<String, List<String>>> mAppsWithPermission;

public AppsAdapter(Context context, List<Pair<String, List<String>>> appsWithPermission) {
    mContext = context;
    mAppsWithPermission = appsWithPermission;
}

static class ViewHolder {
    public TextView appName;
    public TextView appPermissions;
    public ImageView appIcon;
}

@Override
public int getCount() {
    return mAppsWithPermission.size();
}

@Override
public Object getItem(int position) {
    return mAppsWithPermission.get(position);
}

@Override
public long getItemId(int position) {
    return mAppsWithPermission.get(position).hashCode();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {

        convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
        holder = new ViewHolder();
        holder.appName = convertView.findViewById(R.id.list_item_appname);
        holder.appPermissions = convertView.findViewById(R.id.list_item_apppermissions);
        holder.appIcon = convertView.findViewById(R.id.list_item_appicon);
        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    Pair<String, List<String>> item = mAppsWithPermission.get(position);

    holder.appName.setText(item.first);
    holder.appPermissions.setText(item.second.toString());


    return convertView;

}
}
主要活动:

public class MainActivity extends AppCompatActivity{


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final PackageManager packageManager = getPackageManager();

    final ApplicationInfo packageNames = new ApplicationInfo();

    final List<Pair<String, List<String>>> appsWithPermission = new ArrayList<>();

    final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    final List<ResolveInfo> apps = packageManager.queryIntentActivities(mainIntent, 0);
    for (ResolveInfo info : apps) {
        final ApplicationInfo applicationInfo = info.activityInfo.applicationInfo;
        final String appName = (String) applicationInfo.loadLabel(packageManager);

        final List<String> permissions = new ArrayList<>();

        if (appName != null) {

            try {
                final PackageInfo packageInfo = packageManager.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
                final String[] requestedPermissions = packageInfo.requestedPermissions;

                if (requestedPermissions != null) {
                    permissions.addAll(Arrays.asList(requestedPermissions));
                }

            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
        }

        appsWithPermission.add(new Pair<>(appName, permissions));
    }

    final ListView listView = findViewById(R.id.list_view);
    final AppsAdapter appsAdapter = new AppsAdapter(this, appsWithPermission);
    listView.setAdapter(appsAdapter);

}
}
我还上传了最新的MainActivity

我正在尝试获取应用程序图标

我该怎么办

提前谢谢


Faby

我建议重构适配器以保存列表。在应用程序中的某个地方,您可以调用PackageManager.getInstalledPackages,它将返回PackageItemInfo对象的列表-将其传递给适配器。然后使用PackageItemInfo.loadIcon将相应的图标加载到ImageView中。

试试这个

try {
      String pkg = "com.simple.app";//your package name
      Drawable icon = getContext().getPackageManager().getApplicationIcon(pkg);
     imageView.setImageDrawable(icon);
   } catch (PackageManager.NameNotFoundException ne) {
}

谢谢,但是你能把它改成我的代码吗?我不能适应它。。。谢谢你?你问了一个关于PackageManager的问题,我在你的代码中没有看到一行关于它的内容。搜索教程。我想这只会显示我应用程序的图标,而不是每个已安装应用程序的图标。更改软件包名称,如其他应用程序的软件包名称,如com.whatsappHi,我已更新并上载MainActivity。你能帮帮我吗?我现在该怎么办?提前谢谢