Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00003259
Android中獲取系統上安裝的APP信息,並且提供卸載、區別用戶應用和系統應用的小程序,供初學者參考。
public class PakageInfoProvider {
private static final String tag = "GetappinfoActivity";
private Context context;
private List<AppInfo> appInfos;
private AppInfo appInfo;
public PakageInfoProvider(Context context) {
super();
this.context = context;
}
public List<AppInfo> getAppInfo() {
PackageManager pm = context.getPackageManager();
List<PackageInfo> pakageinfos = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
appInfos = new ArrayList<AppInfo>();
for (PackageInfo packageInfo : pakageinfos) {
appInfo = new AppInfo();
//獲取字符串方法
context.getString(R.string.app_name);
context.getResources().getString(R.string.app_name);
//獲取尺寸資源方法
context.getResources().getDimension(R.dimen.test);
//獲取xml文件並且返回的是XmlResourceParse類,其繼承與XmlPullParse
XmlResourceParser xmlrp = context.getResources().getXml(R.xml.yo);
// 獲取應用程序的名稱,不是包名,而是清單文件中的labelname
String str_name = packageInfo.applicationInfo.loadLabel(pm).toString();
appInfo.setAppName(str_name);
// 獲取應用程序的版本號碼
String version = packageInfo.versionName;
appInfo.setAppVersion(version);
// 獲取應用程序的快捷方式圖標
Drawable drawable = packageInfo.applicationInfo.loadIcon(pm);
appInfo.setDrawable(drawable);
// 獲取應用程序是否是第三方應用程序
appInfo.setIsUserApp(filterApp(packageInfo.applicationInfo));
//給一同程序設置包名
appInfo.setPackageName(packageInfo.packageName);
Logger.i(tag, "版本號:" + version + "程序名稱:" + str_name);
appInfos.add(appInfo);
appInfo = null;
}
return appInfos;
}
/**
* 三方應用程序的過濾器
*
* @param info
* @return true 三方應用 false 系統應用
*/
public boolean filterApp(ApplicationInfo info) {
if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
// 代表的是系統的應用,但是被用戶升級了. 用戶應用
return true;
} else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
// 代表的用戶的應用
return true;
}
return false;
}
}