如何判断一个app是system/app还是data/app下面的?
来源:互联网 发布:excel圆环图数据标志 编辑:程序博客网 时间:2024/05/29 04:25
List<PackageInfo> packs = getPackageManager().getInstalledPackages(
0
);
虽然,有些代码号称可以过滤掉系统自身的应用程序,但是只要细看代码就会发现,好像里面的那个布尔变量没有起到什么过滤的作用。
方法一:通过获取的安装包(包括安装的与系统自身的应用程序),对其android.content.pm.PackageInfo的packageName 进行过滤,
但是Android与google的包比较容易过滤掉,但需要对不同产商进行适配;
方法二:枚举 \data\app 文件夹,其下的*.apk文件 就是本机安装的软件,而\system\App下的*.apk文件就是系统自带的软件,
由于普通的程序是无法读取这两个文件夹的,需要root权限吧,因此该方法也行不通(用File.listFiles() + android.permission.FACTORY_TEST 权限 还是不能枚举出文件)
虽然不能枚举文件夹 "\data\app\",但我们可以访问(read)文件夹"\data\app\"下的所有文件,因此可以用如下的方法来获取本机上已经安装的软件(排除系统的应用程序):
1
2
3
4
5
6
7
8
9
10
PackageManager pckMan = getPackageManager();
List<PackageInfo> packs = pckMan.getInstalledPackages(
0
);
count = packs.size();
String name;
int
installedNum =
0
;
for
(
int
i =
0
; i < count; i++) {
PackageInfo p = packs.get(i);
if
(p.versionName ==
null
)
continue
;
1
2
3
4
5
6
7
8
9
10
//判断该软件包是否在/data/app目录下
File f1 =
new
File(
"/data/app/"
+ p.packageName +
".apk"
);
if
(!f1.exists())
continue
;
installedNum++;
/**
* 应用程序的名字
*/
name = p.applicationInfo.loadLabel(pckMan).toString();
}
方法三、可以通过uid来过滤系统系统的安装包,因为android系统中的uid从 1000 ~ 9999 都是给系统程序保留的,所以只要判断package的uid > 10000即可判定该程序是非系统程序。
1
2
if
(p.applicationInfo.uid >
10000
)
//非系统程序
uid是程序在安装的时候由系统分配的。
方法四:这个方法应该是最优的。
1
2
3
4
5
6
7
8
9
ApplicationInfo appInfo = p.applicationInfo;
/**
* Value for {@link #flags}: if set, this application is installed in the
* device's system image.
*/
if
((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) >
0
)
//系统程序
else
//不是系统程序
- 如何判断一个app是system/app还是data/app下面的?
- 如何知道一个apk是放在system/app下还是放在/data/app下?
- 目前开发手机app的几种方式?怎么判断一个APP是原生APP、混合APP还是WEB APP ?
- 判断一个APP页面是原生的还是H5页面
- 判断一个APP页面是原生的还是H5页面
- 如何区别一个 App 是 Native App, Web App 还是 Hybrid app?
- 判断app一个APP页面是原生的还是H5页面
- System/App和Data/App的区别
- 如何鉴别一款App是Web App还是Native App?
- 如何判断是自己进入app还是浏览者进入app
- 判断app是在前台还是后台
- Android app 判断是手机还是平板
- 判断是app打开还是网页打开
- 教你判断一个APP页面是原生的还是H5页面
- 判断APP是原生的还是H5页面
- 安卓如何判断APP是原生的还是WebView实现
- Android如何判断APP使用的是h5界面还是native界面
- 如何判断一款app使用原生实现,还是Hybrid APP
- C++ char*,const char*,string的相互转换
- 设置 gridview 数据 居中 显示
- php打造属于自己的MVC框架-
- C语言的那些事——sqrt()函数 和 double型数据的“%lf”
- sockaddr和sockaddr_in的区别
- 如何判断一个app是system/app还是data/app下面的?
- MVC模式的PHP实现
- 编程序,输出一个乘法口诀表
- 装扮装扮dijit.Tree
- PHP实现MVC开发: 一个简单的MVC
- Ruby开发入门
- 用OPenGL实现 Bresenham画线算法
- Qt模块化笔记之sql——执行sql语句
- [LeetCode]Two Sum