获取安装的应用程序信息
来源:互联网 发布:海康网络视频监控方案 编辑:程序博客网 时间:2024/05/17 05:54
Android手机上获取已经安装的应用,可以使用以下一行代码:
List<PackageInfo> packageList = getPackageManager().getInstalledPackages(0);
当在需要区分已经安装的用户应用程序和系统程序的时候,可以采用以下方法:
方法一: 通过获取的安装包(包括安装的与系统自身的应用程序),对其android.content.pm.PackageInfo的packageName 进行过滤,
但是Anrodi与google的包比较容易过滤掉,但需要对不同产商进行适配,所以该方案不可行。
方法二: 枚举 \data\app 文件夹,其下的*.apk文件 就是用户应用,而\system\app下的*.apk文件就是系统应用。问题来了,由于需要root权限才能访问上述的两个目录,因此该方法也行不通(用File.listFiles() + android.permission.FACTORY_TEST 权限 还是不能枚举出来)。
怎么办呢?可以用如下方法来获取:
方法三: 通过/data/app/目录下的应用存在与否的判断来过滤;
String applicationName;
String packageName;
int userInstalledApk = 0;
int systemInstalledApk = 0;
PackageManager packagemgr= getPackageManager();
List<PackageInfo> packageList= packagemgr.getInstalledPackages(0);
count = packageList.size();
for(int i = 0; i < count; i++) {
PackageInfo pi = packageList.get(i);
if (pi.versionName == null)
continue;
//判断该软件包是否在/data/app目录下
File file = new File( "/data/app/" + pi.packageName + ".apk");
if(!file.exists())
systemInstalledApk++;
userInstalledApk++;
/**
* 应用程序的名字
*/
applicationName = pi.applicationInfo.loadLabel(packagemgr).toString();
packageName = pi.packageName;
}
方法四:通过uid来过滤系统系统的安装包。android系统的安装包uid是在区间 1000 ~ 9999 ,所以只要判断package的uid > 10000,就肯定不是系统应用,代码如下:(uid是程序在安装的时候由系统分配的)
if(pi.applicationInfo.uid > 10000)
//非系统程序
方案五:最有方案。
ApplicationInfo applicationInfo = pi.applicationInfo;
/**
* Value for {@link #flags}: if set, this application is installed in the
* device's system image.
*/
if((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0)
//系统程序
else
//不是系统程序
List<PackageInfo> packageList = getPackageManager().getInstalledPackages(0);
当在需要区分已经安装的用户应用程序和系统程序的时候,可以采用以下方法:
方法一: 通过获取的安装包(包括安装的与系统自身的应用程序),对其android.content.pm.PackageInfo的packageName 进行过滤,
但是Anrodi与google的包比较容易过滤掉,但需要对不同产商进行适配,所以该方案不可行。
方法二: 枚举 \data\app 文件夹,其下的*.apk文件 就是用户应用,而\system\app下的*.apk文件就是系统应用。问题来了,由于需要root权限才能访问上述的两个目录,因此该方法也行不通(用File.listFiles() + android.permission.FACTORY_TEST 权限 还是不能枚举出来)。
怎么办呢?可以用如下方法来获取:
方法三: 通过/data/app/目录下的应用存在与否的判断来过滤;
String applicationName;
String packageName;
int userInstalledApk = 0;
int systemInstalledApk = 0;
PackageManager packagemgr= getPackageManager();
List<PackageInfo> packageList= packagemgr.getInstalledPackages(0);
count = packageList.size();
for(int i = 0; i < count; i++) {
PackageInfo pi = packageList.get(i);
if (pi.versionName == null)
continue;
//判断该软件包是否在/data/app目录下
File file = new File( "/data/app/" + pi.packageName + ".apk");
if(!file.exists())
systemInstalledApk++;
userInstalledApk++;
/**
* 应用程序的名字
*/
applicationName = pi.applicationInfo.loadLabel(packagemgr).toString();
packageName = pi.packageName;
}
方法四:通过uid来过滤系统系统的安装包。android系统的安装包uid是在区间 1000 ~ 9999 ,所以只要判断package的uid > 10000,就肯定不是系统应用,代码如下:(uid是程序在安装的时候由系统分配的)
if(pi.applicationInfo.uid > 10000)
//非系统程序
方案五:最有方案。
ApplicationInfo applicationInfo = pi.applicationInfo;
/**
* Value for {@link #flags}: if set, this application is installed in the
* device's system image.
*/
if((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0)
//系统程序
else
//不是系统程序
- 获取安装的应用程序信息
- 获取安装应用程序apk的信息
- 获取应用程序的信息
- android获取应用程序的信息
- 获取应用程序的一些信息
- 获取应用程序所有安装包信息
- 获取所有已安装软件以及获取应用程序版本信息
- Android-获取系统的应用程序的信息
- 60遍历获取手机安装的应用程序的图标、应用名称等信息的方法
- 判断某个应用程序是 不是三方的应用程序 及获取安装的所有的程序信息的集合
- Android获取应用程序的版本信息
- 获取Android系统中应用程序的信息
- Android获取手机内应用程序的信息
- 获取手机所有应用程序的信息
- 远程获取应用程序的crash信息
- Android应用程序的获取,安装。
- Android获取安装的应用程序
- HOW TO:获取当前Office应用程序的安装版本语言等信息
- HDU 1316 大数
- 基于openswan klips的IPsec VPN实现分析(五)应用层和内核通信(2)
- 盈利模式
- 10年+程序人生感悟[2] - 贵在坚持
- 综合练习——俏江南网站之三——如何从一个网页得到网站的其他页面
- 获取安装的应用程序信息
- [MFC]动态控件实现 程序执行流程 [大三TJB_708]
- Oracle 10.2.0.1静默升级至10.2.0.4(Linux)
- LCD Driver Test for Linux2.6.xx+ARM9
- 关于Linux系统性能瓶颈定位分析(一),Nginx状态页测试(待续)
- OK6410裸机开发之LED灯
- compile/Link option setting in VC++6
- eclipse 代理设置
- 在Liunx环境下编译android程序