首先PackageItemInfo,它是包含了一些信息的基类,它的直接子类有:ApplicationInfo、
ComponentInfo、InstrumentationInfo、PermissionGroupInfo、PermissionInfo。它的间接子类
有:ActivityInfo、ProviderInfo、ServiceInfo。这个类包含的信息对于所有包中项目是平等的。这些
Package items是被Package manager所持有的。这个类提供了属性的非常普通的基本设置:label、
icon和meta-data。这个类的意图不是被自己调用。它在这只是简单地分享被package manager返回的
所有items之间的普通定义。比如,它自己并不实现Parcelable接口,但却帮助实现了Parcelable的子类
提供了方便的方法。
ApplicationInfo是从一个特定的应用得到的信息。这些信息是从相对应的Androdimanifest.xml的<
application>标签中收集到的。
ResolveInfo这个类是通过解析一个与IntentFilter相对应的intent得到的信息。它部分地对应于从
AndroidManifest.xml的<intent-filter>标签收集到的信息。
PackageManager这个类是用来返回各种的关联了当前已装入设备了的应用的包的信息。你可以通过
getPacageManager来得到这个类。
通过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时,表示获取的应用
为系统预装的应用,反之则为手动安装的应用。
大家可以看下代码,说明已经写在注释中。
(1)获取应用的代码:
/**
* 查询手机内非系统应用
* @param context
* @return
*/
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);
//判断是否为非系统预装的应用程序
if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
// customs applications
apps.add(pak);
}
}
return apps;
}
(2)获取图片、应用名、包名:
PackageManager pManager = MessageSendActivity.this.getPackageManager();
List<PackageInfo> appList = Utils.getAllApps(MessageSendActivity.this);
for(int i=0;i<appList.size();i++) {
PackageInfo pinfo = appList.get(i);
//set Icon
pManager.getApplicationIcon(pinfo.applicationInfo);
//set Application Name
pManager.getApplicationLabel(pinfo.applicationInfo);
//set Package Name
pinfo.applicationInfo.packageName;
}
(3)获取支持分享的应用的代码:
List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();
Intent intent=new Intent(Intent.ACTION_SEND,null);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("text/plain");
PackageManager pManager = context.getPackageManager();
mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
return mApps;
}
由于该方法,返回的并不是 PackageInfo 对象。而是 ResolveInfo。因此获取图片、应用名、包名的方法不一样,
如下:
PackageManager pManager = MessageSendActivity.this.getPackageManager();
/*********************查询手机内所有支持分享的应用*********************/
List<ResolveInfo> resolveList = Utils.getShareApps(MessageSendActivity.this);
for(int i=0;i<resolveList.size();i++) {
ResolveInfo resolve = resolveList.get(i);
ShareItemInfo shareItem = new ShareItemInfo();
//set Icon
shareItem.setIcon(resolve.loadIcon(pManager));
//set Application Name
shareItem.setLabel(resolve.loadLabel(pManager).toString());
//set Package Name
shareItem.setPackageName(resolve.activityInfo.packageName);
}
总结:
通过
PackageInfo 获取具体信息方法:
包名获取方法:packageInfo.packageName
icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
使用权限获取法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)
.requestedPermissions
通过
ResolveInfo 获取具体信息方法:
包名获取方法:resolve.activityInfo.packageName
icon获取获取方法:resolve.loadIcon(packageManager)
应用名称获取方法:resolve.loadLabel(packageManager).toString()
分享到:
相关推荐
在Android平台上,获取CPU、内存和磁盘使用率信息对于开发者来说是十分重要的,这有助于监控设备性能,优化应用运行,以及提供用户友好的反馈。...学习并理解这个示例将对掌握Android系统信息获取有极大的帮助。
在Android系统中,开发者可以通过Android提供的API来获取系统的内存信息以及正在运行的进程状态。这一功能主要涉及到`ActivityManager`类的使用。`ActivityManager`是Android SDK中的一个关键组件,它提供了对系统...
此外,还可以通过`/proc/cpuinfo`文件获取CPU的详细信息,但这些操作通常需要权限,因此在应用中使用时要注意处理权限问题。 2. 内存信息获取: 获取内存信息通常通过`ActivityManager`类的`getMemoryInfo()`方法...
Android 中获取基站信息需要使用两个类:TelephonyManager 和 GsmCellLocation。TelephonyManager 是 Android 中的一个系统服务,提供了对电话通讯服务的访问。它不能直接实例化,需要通过 Context....
Android 操作系统中,获取设备各种信息是非常重要的,特别是在手机开发中。 Android 提供了一个类 android.telephony.TelephonyManager,用于获取手机相关信息。在本篇文章中,我们将详细介绍如何使用 ...
在Android中,获取CPU使用率通常需要读取 `/proc/stat` 文件,该文件包含了系统运行的各种统计信息。以下是一个简单的示例,展示如何计算CPU使用率: ```java public float getCpuUsage() { String[] cpuUsage = ...
Android 获取手机信息 Android 操作系统提供了...使用 Java 代码可以轻松地获取 Android 手机的各种信息,包括安装的应用信息、手机可用内存和总内存、手机 CPU 信息等。这些信息对于开发 Android 应用程序非常有用。
在Android应用开发中,获取设备信息是常见的需求,这包括但不限于设备型号、硬件特性、操作系统版本等。这些信息对于调试、个性化用户体验或者数据分析都非常重要。本文将深入探讨如何在Android中获取这些关键信息。...
获取带有以太网接口的android系统中ethernet和wifi连接信息(连接状态,IP地址,dns,netmask等信息)
总结起来,获取Android中所有应用程序信息的关键在于正确使用`PackageManager`的`queryIntentActivities()`方法,结合`Intent`来定义查询条件。通过对返回的`ResolveInfo`列表进行遍历,可以获取到每个应用的详细...
在Android系统中,获取设备的硬件信息是开发者和普通用户都可能需要的操作。这涉及到对设备的CPU(中央处理器)、内存(RAM)、ROM(只读存储器)以及摄像头等核心硬件组件的理解。以下是对这些硬件信息的详细说明:...
// 位置信息获取的时间戳 // 处理位置信息 } // 其他LocationListener的方法... }; locationManager.requestLocationUpdates("gps", 2000, 0, locationListener); // 每2秒更新一次,无距离阈值 ``` 除了位置...
在Android开发中,`PackageManager`是一个至关重要的组件,它提供了获取和管理安装在设备上的所有应用包信息的能力。本文将详细讲解如何利用`PackageManager`来获取Android应用程序(包)的相关信息。 首先,让我们...
### Android系统中如何获取系统进程信息 在Android开发过程中,获取系统进程信息是实现设备监控、性能优化等应用功能的基础。本文将详细介绍如何利用Android提供的API来获取系统进程信息,并展示一个简易进程管理器...
以下是一些关键的知识点,涵盖了如何在Android中获取描述中提到的各种信息: 1. **通讯录**:在Android中,我们可以使用`ContentResolver`和`ContactsContract`类来访问通讯录。首先,我们需要获取读取联系人权限,...
在Android中,获取CPU信息相对复杂,通常需要使用JNI或者第三方库。一个简单的方法是读取/proc/cpuinfo文件,但这种方法可能无法获取到详细的CPU型号,只能得到一些基本信息,比如核心数: ```java FileInputStream...
在Android平台上,获取短信和通话记录信息是开发者常用于实现各种功能,如日志记录、安全监控或备份应用的关键操作。下面将详细讲解如何在Android系统中获取这些数据。 一、获取短信信息 1. 权限声明: 首先,为了...
在Android平台上,获取手机...总的来说,获取Android设备的手机号码和运营商信息需要正确配置权限,并使用`TelephonyManager`类提供的方法。在实际应用中,还需要处理可能出现的异常和空值情况,确保用户体验的流畅性。
这个压缩包"Android系统信息和Apk应用信息获取.rar"可能包含了多个示例或者库,用于帮助开发者实现这些功能。由于无法直接查看具体内容,我将根据常规方法来讲解如何在Android中获取这些信息。 **获取Android系统...
本教程将详细讲解如何在Android 6.0及以上版本中兼容地获取手机敏感信息。 首先,我们需要了解Android的权限管理模型。在Android 6.0之前,应用在安装时会一次性获取所有所需权限。但这种模式可能导致用户无法明确...