I'm trying to do an app with all installed app's name, permissions and icon. I have done successfully the first and the second, but I don't know what to do for the third.
Here it is AppsAdapter class:
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;
}
}
MainActivity:
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);
}
}
I've uploaded also the updated MainActivity.
I'm trying to get the app icon.
What should I do?
Thanks in advance
Faby