浏览 5284 次
锁定老帖子 主题:过滤掉系统自带的应用程序
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-13
最后修改:2010-12-13
if (p.versionName == null) { continue; } 可以过滤掉系统自带的应用程序,我尝试了一下,不行。 查看源码,InstalledAppDetails.java应用程序的详细资料的类(比如我们进入系统的应用程序列表中,点击某个应用程序后,就会显示一个关于这个应用程序的详细列表),在这个类中,可以看到这么这个函数setAppBtnState:这个函数的功能设定详细列表中的几个按钮的值信息。 在这个函数中看到 if ((mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { if ((mAppInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { mAppButtonState = AppButtonStates.FACTORY_RESET; mAppButtonText = getText(R.string.app_factory_reset); } else { if ((mAppInfo.flags & ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA) == 0) { // Hide button if diableClearUserData is set mAppButtonState = AppButtonStates.NONE; visible = false; } else { mAppButtonState = AppButtonStates.CLEAR_DATA; mAppButtonText = getText(R.string.clear_user_data_text); } } } else { mAppButtonState = AppButtonStates.UNINSTALL; mAppButtonText = getText(R.string.uninstall_text); } 上面标红的一句,if ((mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)就是用来判断应用程序是不是系统自带的。这样就可以通过这句来过滤掉系统自带的应用程序,例子如下 List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(0); int count = packs.size() - 1; for (int i = 0; i <= count; i++) { PackageInfo p = packs.get(i); if (p.versionName == null) { continue; } ApplicationInfo itemInfo = p.applicationInfo; if ((itemInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) continue; ............... } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-01-25
这个很好很强大。我也看到过p.versionName == null的做法,但是很纳闷。
不过因为用不到所以就没理会。哈哈,很强大,感谢分享。 |
|
返回顶楼 | |