我正在尝试使用Pacakge管理器从设备中获取已卸载应用的列表。 但是,代码返回所有已安装应用程序的列表。
// get a list of all installed apps
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
for(ApplicationInfo unisntalledPackage : packages){
// itearte hough apps vi acativity manager and get details
PackageInfo pkginfo=null;
try {
pkginfo = pm.getPackageInfo(unisntalledPackage.processName,
PackageManager.GET_UNINSTALLED_PACKAGES);
} catch (NameNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (pkginfo !=null && !isSystemPackage(pkginfo)) {
try{ .....//get info form package object
任何意见都赞赏。
答案 0 :(得分:2)
使用GET_UNINSTALLED_PACKAGES返回&#34;有关具有数据目录的所有应用程序(甚至是未安装的应用程序)的信息。&#34;所以代码正在完成预期的工作 - 你得到所有已安装的软件包,另外任何已卸载的软件包,但用户选择保留数据。
要获得已卸载的软件包,您必须遍历列表,只选择已卸载的软件包。
答案 1 :(得分:1)
@Zmarties感谢您的参与。
通过迭代包List并使用TRUE FLAG_IS_DATA_ONLY捕获ApplicationInfo对象,该对象未返回 一个16777216的整数(如果为true则返回常量)我们可以捕获已卸载的应用程序;
if(unisntalledPackage.FLAG_IS_DATA_ONLY !=16777216 ){
// then app is unisntalled
然而,无法确定是否未捕获任何已安装在我的测试设备上的数据的应用程序。