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;
}
分享到:
相关推荐
本篇将深入探讨如何通过`PackageInfo`类来获取App的签名信息。 首先,`PackageInfo`是Android系统提供的一种接口,它包含了关于应用程序包的详细信息,如权限、版本号、证书等。要获取`PackageInfo`,我们可以使用`...
PackageInfo packageInfo = pm.getPackageArchiveInfo(apkPath, 0); String packageName = packageInfo.packageName; ``` 接下来是获取APK的版本信息,包括版本号(versionCode)和版本名称(versionName)。同样,...
此外,`PackageInfo`类还提供了其他丰富的信息,如版本信息(`packageInfo.versionName`和`packageInfo.versionCode`)、权限列表(`packageInfo.permissions`)等。你可以根据实际需求灵活利用这些信息。 总结起来...
本篇将详细讲解`PackageManager`中的`ApplicationInfo`、`PackageInfo`、`ResolveInfo`和`ActivityInfo`这四个关键类,并结合具体实例来阐述它们的作用和用法。 `ApplicationInfo`是描述一个应用全局信息的类,包含...
for (PackageInfo packageInfo : packages) { if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { systemApps.add(packageInfo); } } ``` 这样,`systemApps`列表就包含了所有系统...
android获取未安装APK文件的图标 android开发技巧整理
PackageInfo packageInfo = this.getPackageManager().getPackageInfo(pkName, 0); String versionName = packageInfo.versionName; int versionCode = packageInfo.versionCode; } catch (PackageManager....
for (PackageInfo packageInfo : packages) { Log.d("AppName", packageInfo.applicationInfo.loadLabel(pm).toString()); Log.d("PackageName", packageInfo.packageName); Log.d("VersionName", packageInfo....
此方法返回一个`PackageInfo`对象的列表,每个`PackageInfo`对象代表一个已安装的应用: ```java List<PackageInfo> installedPackages = packageManager.getInstalledPackages(PackageManager.GET_META_DATA); ```...
2. **获取应用名称**:从`PackageInfo`对象中,你可以通过`packageInfo.applicationInfo.loadLabel(packageManager)`获取应用的显示名称。 3. **获取应用图标**:应用的图标可以通过`packageInfo.applicationInfo....
此外,Apache HTTP Client库可以帮助你发送网络请求,获取远程服务器上的应用信息。 7. **线程安全**: 当处理大量应用信息时,考虑使用线程池来并行处理,提高效率。`ExecutorService`和`Future`接口可以帮助你...
这个方法返回一个`PackageInfo`对象的数组,每个`PackageInfo`对象代表一个应用的详细信息。 ```java List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_META_DATA); ``` 3...
PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0); String appName = packageInfo.applicationInfo.loadLabel(packageManager).toString(); } catch (PackageManager....
在Android平台上,对移动设备的流量监控是至关重要的,它可以帮助开发者或用户了解应用程序的网络使用情况,从而优化网络资源的消耗。以下是一些关于Android流量监控的关键知识点: 1. **TrafficStats类**: ...
此方法返回一个`PackageInfo`对象的数组,每个`PackageInfo`对象代表一个应用。 ```java PackageManager pm = getApplicationContext().getPackageManager(); List<PackageInfo> packages = pm....
一、获取安装包信息 代码如下:/** * 获取apk包的信息:版本号,名称,图标等 * @param absPath apk包的绝对路径 * ... PackageInfo pkgInfo = pm.getPackageArchiveInfo(absPath,PackageManager.GET_ACTIVITIES); if
在Android中,`TrafficStats`类区分了不同类型的网络接口,例如通过`getMobileRxBytes()`获取GPRS/EDGE/UMTS/LTE等移动网络的接收流量,而`getWifiRxBytes()`则用于获取Wi-Fi的接收流量。根据需求,你可以针对不同的...
if ((packageInfo.flags & PackageInfo.FLAG_SYSTEM) != 0) { // 这是一个系统应用 } } ``` 第三方应用信息获取: 对于第三方应用,我们同样利用`PackageManager`,但这次筛选条件是不包含`FLAG_SYSTEM`标志。还...
此外,这样的数据模型也可以在序列化和反序列化,网络请求,或者是数据库存储等操作中发挥重要作用。 总的来说,`AppInfoBean.java`是Android应用开发中一个常见的设计模式,用于封装和管理应用信息。它提供了结构...