Android 如何获取应用程序图标?
我正在尝试使用所有已安装应用程序的名称、权限和图标创建一个应用程序。 第一次和第二次我都做得很成功,但第三次我不知道该怎么办 这里是AppsAdapter类: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
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。你能帮帮我吗?我现在该怎么办?提前谢谢