Sách

Thứ Tư, 6 tháng 3, 2019

[Android] Lấy danh sách tất cả ứng dụng trong thiết bị

public static List<AppInfo> getInstalledPackages(Context context) {
//todo get all applications has installed on device.
PackageManager packageManager = context.getPackageManager();
List<AppInfo> list = new ArrayList<>();
List<PackageInfo> packs = packageManager.getInstalledPackages(0);

for (PackageInfo packageInfo : packs) {
try {
AppInfo item = new AppInfo();
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
item.setName(applicationInfo.loadLabel(packageManager));
item.setPackageName(packageInfo.packageName);
item.setVersionName(packageInfo.versionName);
item.setVersionCode(packageInfo.versionCode);
item.setDescription(applicationInfo.loadDescription(packageManager));
item.setIcon(applicationInfo.loadIcon(packageManager));
//item.setLogo(applicationInfo.loadLogo(packageManager));
//item.setBanner(applicationInfo.loadBanner(packageManager));
item.setSystem(((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0));

//todo get all requested permissions of application
PackageInfo packageInfoPermissions =
packageManager.getPackageInfo(packageInfo.packageName, PackageManager.GET_PERMISSIONS);
if (packageInfoPermissions != null) {
String[] requestedPermissions = packageInfoPermissions.requestedPermissions;
if (requestedPermissions != null) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < requestedPermissions.length; i++) {
sb.append((i + 1));
sb.append(". ");
sb.append(requestedPermissions[i]);
sb.append("\n");
}
item.setPermission(sb.toString());
}
}
list.add(item);
} catch (OutOfMemoryError | Exception e) {
e.printStackTrace();
}
}
if (list.size() > 0) {
Comparator comparator = new Comparator<AppInfo>() {
@Override
public int compare(final AppInfo leftObject, final AppInfo rightObject) {
return leftObject.getName().compareToIgnoreCase(rightObject.getName());
}
};
Collections.sort(list, comparator);
}
Log.i(TAG, "getInstalledPackages: " + list);
return list;
}

public class AppInfo implements Serializable {
String packageName;
String versionName;
int versionCode;
String name;
String description;
Drawable logo;
Drawable icon;
Drawable banner;
boolean isSystem;
String permission;

public AppInfo() {
}

public String getPackageName() {
return packageName;
}

public void setPackageName(final String packageName) {
this.packageName = packageName;
}

public String getVersionName() {
return versionName;
}

public void setVersionName(final String versionName) {
this.versionName = versionName;
}

public int getVersionCode() {
return versionCode;
}

public void setVersionCode(final int versionCode) {
this.versionCode = versionCode;
}

public String getName() {
if (name == null)
name = "";
return name;
}

public void setName(final CharSequence name) {
if (name != null)
this.name = name.toString();
else
this.name = "";
}

public void setName(final String name) {
this.name = name;
}

public String getDescription() {
return description;
}

public void setDescription(final CharSequence description) {
if (description != null)
this.description = description.toString();
else
this.description = "";
}

public void setDescription(final String description) {
this.description = description;
}

public Drawable getLogo() {
return logo;
}

public void setLogo(final Drawable logo) {
this.logo = logo;
}

public Drawable getIcon() {
return icon;
}

public void setIcon(final Drawable icon) {
this.icon = icon;
}

public Drawable getBanner() {
return banner;
}

public void setBanner(final Drawable banner) {
this.banner = banner;
}

public boolean isSystem() {
return isSystem;
}

public void setSystem(final boolean system) {
isSystem = system;
}

public String getPermission() {
return permission;
}

public void setPermission(String permission) {
this.permission = permission;
}

@Override
public String toString() {
return "\n{" +
"packageName='" + packageName + '\'' +
", versionName='" + versionName + '\'' +
", versionCode=" + versionCode +
", name='" + name + '\'' +
", description='" + description + '\'' +
", isSystem=" + isSystem +
'}';
}
}