详细解读Android获取已安装应用信息(图标,名称,版本号,包)

简介: 详细解读Android获取已安装应用信息(图标,名称,版本号,包)

Android 菜市场上有一款应用较 ShareApp,可以显示,管理,分享Android手机上安装的应用。

但比较不爽的是,它把很多系统自带的应用程序也都显示了出来。这些程序往往是无法卸载的,更无法分享,让“已安装应用程序”的列表显的非常凌乱。

我在手机上运行了一下,结果Gtalk,DRMService这些系统应用都显示出来了..比较不爽。

于是自己写了个程序,看看能不能只显示用户自己安装的程序。

程序大概分成三个部分:

1.获取手机已安装的所有应用package的信息(其中包括用户自己安装的,还有系统自带的);

2.滤除系统自带应用;

3.通过列表显示出应用程序的图标(icon),和其他文字信息(应用名称,包名称package name,版本号等等)

首先,我们定义一个数据结构,来保存应用程序信息(icon,name,packageName,versionName,versionCode,等)

publicclass AppInfo {

public String appName="";

public String packageName="";

public String versionName="";

publicint versionCode=0;

public Drawable appIcon=null;

publicvoid print()

{

Log.v("app","Name:"+appName+" Package:"+packageName);

Log.v("app","Name:"+appName+" versionName:"+versionName);

Log.v("app","Name:"+appName+" versionCode:"+versionCode);

}

}

然后我们通过PackageManager 来获取已安装的应用包信息。

     ArrayList appList = new ArrayList(); //用来存储获取的应用信息数据

     List[/span>PackageInfo

for(int i=0;i[/span>packages.size();i++) {

PackageInfo packageInfo = packages.get(i);

AppInfo tmpInfo =new AppInfo();

tmpInfo.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();

tmpInfo.packageName = packageInfo.packageName;

tmpInfo.versionName = packageInfo.versionName;

tmpInfo.versionCode = packageInfo.versionCode;

tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(getPackageManager());

appList.add(tmpInfo);

}//代码效果参考:http://www.ezhiqi.com/bx/art_309.html

//好啦 这下手机上安装的应用数据都存在appList里了。

那么如何判断一个应用是否为系统应用呢?

if((packageInfo.applicationInfo.flagsApplicationInfo.FLAG_SYSTEM)==0)

{

//非系统应用

}//代码效果参考:http://www.ezhiqi.com/zx/art_128.html

else

{

//系统应用        

}

所以如果只需要获取到非系统应用信息,代码如下:

ArrayList appList = new ArrayList(); //用来存储获取的应用信息数据

List[/span>PackageInfo

for(int i=0;i[/span>packages.size();i++) {

PackageInfo packageInfo = packages.get(i);

AppInfo tmpInfo =new AppInfo();

tmpInfo.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();

tmpInfo.packageName = packageInfo.packageName;

tmpInfo.versionName = packageInfo.versionName;

tmpInfo.versionCode = packageInfo.versionCode;

tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(getPackageManager());

//Only display the non-system app info

if((packageInfo.applicationInfo.flagsApplicationInfo.FLAG_SYSTEM)==0)

{

appList.add(tmpInfo);//如果非系统应用,则添加至appList

}//代码效果参考:http://www.ezhiqi.com/bx/art_555.html

}

最后,我们可以自定义一个app_row.xml的layout 文件,用来显示appList中的数据

是不是看着利索多了~~~(我在每行里只显示了icon 和 appName,你也可以修改app_row.xml 和 AppAdapter 部分后显示更多的信息)

大家可以参考我的源码:

源码下载地址:

参考:

1. 【Android分享】 Android 得到已安装的应用程序信息

该文中描述了如何获取Android 已安装应用信息,但关于系统应用的判断部分存在错误。

2. Android中级篇之区分系统程序和安装程序

相关文章
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
661 4
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
286 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
存储 机器学习/深度学习 API
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
1896 31
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
|
XML 编解码 Android开发
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
963 0
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
1913 83
|
Java API 开发工具
Android cmdline-tools版本与最小JDK的关系
总的来说,Android的命令行工具和JDK之间的关系就像是一场舞会,两者需要彼此配合,才能共同创造出美妙的舞蹈。如果选择了不合适的舞伴(即不兼容的版本),可能会导致舞蹈中的步伐混乱,甚至无法完成舞蹈。而即使选择了合适的舞伴,也需要考虑舞伴的舞蹈技巧(即性能和稳定性),才能确保舞蹈的完美表现。因此,选择合适的Android命令行工具和JDK版本,是每一个Android开发者都需要面对的重要决定。
518 13
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1159 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
安全 开发工具 Android开发
【Android Git】Git版本回退方式
在实际操作中,选择合适的版本回退方式,可以有效地管理代码版本,提高开发效率和代码质量。
967 26
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
11252 2
|
Android开发 Java
如何在Android Studio中导入包:android-support-v4/Fragment
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/48710143 ...
3636 0

热门文章

最新文章