Android实现获取应用程序相关信息列表的方法
本文所述为Androdi获取手机应用列表的方法,比如获取到Android应用的软件属性、大小和应用程序路径、应用名称等,获取所有已安装的Android应用列表,包括那些卸载了的,但没有清除数据的应用程序,同时在获取到应用信息的时候,判断是不是系统的应用程序,这是一个应用管理器所必需具备的功能。
具体实现代码如下:
//AppInfoProvider.java packagecom.xh.ui; importjava.util.ArrayList; importjava.util.List; importandroid.content.Context; importandroid.content.pm.ApplicationInfo; importandroid.content.pm.PackageInfo; importandroid.content.pm.PackageManager; importandroid.graphics.drawable.Drawable; /** *类名称:AppInfoProvider *类描述:获取应用程序的相关信息 *创建人:LXH */ publicclassAppInfoProvider{ privatePackageManagerpackageManager; //获取一个包管理器 publicAppInfoProvider(Contextcontext){ packageManager=context.getPackageManager(); } /** *获取系统中所有应用信息, *并将应用软件信息保存到list列表中。 **/ publicList<AppInfo>getAllApps(){ List<AppInfo>list=newArrayList<AppInfo>(); AppInfomyAppInfo; //获取到所有安装了的应用程序的信息,包括那些卸载了的,但没有清除数据的应用程序 List<PackageInfo>packageInfos=packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES); for(PackageInfoinfo:packageInfos){ myAppInfo=newAppInfo(); //拿到包名 StringpackageName=info.packageName; //拿到应用程序的信息 ApplicationInfoappInfo=info.applicationInfo; //拿到应用程序的图标 Drawableicon=appInfo.loadIcon(packageManager); //拿到应用程序的大小 //longcodesize=packageStats.codeSize; //Log.i("info","-->"+codesize); //拿到应用程序的程序名 StringappName=appInfo.loadLabel(packageManager).toString(); myAppInfo.setPackageName(packageName); myAppInfo.setAppName(appName); myAppInfo.setIcon(icon); if(filterApp(appInfo)){ myAppInfo.setSystemApp(false); }else{ myAppInfo.setSystemApp(true); } list.add(myAppInfo); } returnlist; } /** *判断某一个应用程序是不是系统的应用程序, *如果是返回true,否则返回false。 */ publicbooleanfilterApp(ApplicationInfoinfo){ //有些系统应用是可以更新的,如果用户自己下载了一个系统的应用来更新了原来的,它还是系统应用,这个就是判断这种情况的 if((info.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)!=0){ returntrue; }elseif((info.flags&ApplicationInfo.FLAG_SYSTEM)==0){//判断是不是系统应用 returntrue; } returnfalse; } }
与实例相关的Java类如下:
//AppInfo.java packagecom.xh.ui; importandroid.graphics.drawable.Drawable; /** *类名称:AppInfo *类描述:应用程序类,包括了程序相关属性 *创建人:LXH */ publicclassAppInfo{ privateDrawableicon; privateStringappName; privateStringpackageName; privatebooleanisSystemApp; privatelongcodesize; publiclonggetCodesize(){ returncodesize; } publicvoidsetCodesize(longcodesize){ this.codesize=codesize; } publicDrawablegetIcon(){ returnicon; } publicvoidsetIcon(Drawableicon){ this.icon=icon; } publicStringgetAppName(){ returnappName; } publicvoidsetAppName(StringappName){ this.appName=appName; } publicStringgetPackageName(){ returnpackageName; } publicvoidsetPackageName(StringpackageName){ this.packageName=packageName; } publicbooleanisSystemApp(){ returnisSystemApp; } publicvoidsetSystemApp(booleanisSystemApp){ this.isSystemApp=isSystemApp; } }
实例中配有详尽的注释,读者可以在理解程序功能的基础上根据自身项目需求加以改进和完善。