Get all packages installed in Android //https://github.com/aNNiMON/Lightweight-Stream-API
final PackageManager pm = getPackageManager();List<ApplicationInfo> packagesAll = pm.getInstalledApplications(PackageManager.GET_META_DATA);Get all packages installed from user
List<ApplicationInfo> packagesByUser = Stream.of(packagesAll)
.filter((p -> (p.flags & ApplicationInfo.FLAG_SYSTEM) == 0))
.map(ApplicationInfo::new)
.collect(Collectors.toList());Get all packages installed by system, bloatware...
List<ApplicationInfo> packagesBySystem = Stream.of(packagesAll)
.filter((p -> (p.flags & ApplicationInfo.FLAG_SYSTEM) != 0))
.map(ApplicationInfo::new)
.collect(Collectors.toList());Get all packages stay disabled
List<ApplicationInfo> packagesDisabled = Stream.of(packagesAll)
.filter((p -> (!p.enabled)))
.map(ApplicationInfo::new)
.collect(Collectors.toList());Get all packages installed in external storages SD-Card
List<ApplicationInfo> packagesExternalSD = Stream.of(packagesAll)
.filter((p -> (p.flags & ApplicationInfo.FLAG_SYSTEM) == 0)) //packages by User
.filter((p -> (p.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0))
.map(ApplicationInfo::new)
.collect(Collectors.toList());General functions for packages
private boolean isSystemPackage(ApplicationInfo applicationInfo) {
return ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0);
}Extract package label
private String getPackageNameLabel(String packageName) {
try {
return (String) getPackageManager().getApplicationLabel(getPackageManager().getApplicationInfo(packageName, PackageManager.GET_META_DATA));
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return null;
}
}Try if packages move to sd
private boolean tryMoveSDPackage(ApplicationInfo applicationInfo) {
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(applicationInfo.packageName, 0);
if (packageInfo.installLocation == PackageInfo.INSTALL_LOCATION_AUTO) {
//Log.i(TAG, "INSTALL_LOCATION_AUTO");
return true;
} else if (packageInfo.installLocation == PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL) {
//Log.d(TAG, "INSTALL_LOCATION_PREFER_EXTERNAL");
return true;
} else {
//Log.w(TAG, "INSTALL_LOCATION_INTERNAL_ONLY");
return false;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
}