PackageInfo笔记[网络整理]

PackageItemInfo它包含了一些信息的基类。

它的直接子类有:

ApplicationInfo、 ComponentInfo、InstrumentationInfo、PermissionGroupInfo、PermissionInfo.

它的间接子类有:

ActivityInfo、ProviderInfo、ServiceInfo。

这个类包含的信息对于所有包中项目是平等的。这些Package items是被Package manager所持有的。

PackageManager这个类是用来返回各种的关联了当前已装入设备了的应用的包的信息。你可以通过getPacageManager来得到这个类。

PackageManager manager = getPackageManager();//得到manager

 ApplicationInfo是从一个特定的应用得到的信息。这些信息是从相对应的Androdimanifest.xml的< application>标签中收集到的。

List< ApplicationInfo> appList = manager.getInstalledApplications

ResolveInfo这个类是通过解析一个与IntentFilter相对应的intent得到的信息。

它部分地对应于从AndroidManifest.xml的< intent>标签收集到的信息。

Intent intent = new Intent(Intent.A CTION_MAIN,null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
//通过Intent查找相关的Activity,更准确
List< ResolveInfo> appList = manager.queryIntentActivities(intent,0);

eg:

ResolveInfo  resolve = appList.get(i);
resolve.activityInfo.packageName//包名获取方法
resolve.loadIcon(packageManager)//icon获取获取方法
resolve.loadLabel(packageManager).toString()//应用名称获取方法

 

[注]:

它是通过解析< Intent-filter>标签得到有

< action android:name=”android.intent.action.MAIN”/>

< action android:name=”android.intent.category.LAUNCHER”/>

这样的app,所以得到的要比第一种方法少(前者比它多那种service、previder等app)。

[*] ApplicationInfo与ResolveInfo比较:前者能够得到Icon、Label、meta-data、description。

    后者只能得到Icon、Label。

[代码示例]

1.通过PackageManager可以获取手机端已安装的apk文件的信息:

PackageManager packageManager = this.getPackageManager();
List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);

通过以上方法,可以得到手机中安装的所有应用程序,既包括了手动安装的apk包的信息,

也包括了系统预装的应用软件的信息。要区分这两类软件可使用以下方法:

a.从packageInfoList获取的packageInfo,再通过packageInfo.applicationInfo获取applicationInfo。

b.判断(applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)的值,该值大于0时,表示获取的应

用为系统预装的应用,反之则为手动安装的应用。

//获取手机内所有应用
public static List<PackageInfo> getAllApps(Context context) {
        List<PackageInfo> apps = new ArrayList<PackageInfo>();
        PackageManager pManager = context.getPackageManager();
        //获取手机内所有应用
        List<PackageInfo> paklist = pManager.getInstalledPackages(0);
        for (int i = 0; i < paklist.size(); i++) {
            PackageInfo pak = (PackageInfo) paklist.get(i);
			//获取应用程序icon:pManager.getApplicationIcon(pak.applicationInfo);
			//获取应用程序名字:pManager.getApplicationLabel(pak.applicationInfo).toString());
			//获取应用程序包名:pak.applicationInfo.packageName;
            //判断是否为非系统预装的应用程序
            if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
                // customs applications
                apps.add(pak);
            }
        }
        return apps;
}

猜你喜欢

转载自yxwang0615.iteye.com/blog/1706560