Android实现获取应用程序相关信息列表的方法

2023-10-30

 

本文所述为Androdi获取手机应用列表的方法,比如获取到Android应用的软件属性、大小和应用程序路径、应用名称等,获取所有已安装的Android应用列表,包括那些卸载了的,但没有清除数据的应用程序,同时在获取到应用信息的时候,判断是不是系统的应用程序,这是一个应用管理器所必需具备的功能。

具体实现代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//AppInfoProvider.java
package com.xh.ui;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
/**
  * 类名称:AppInfoProvider
  * 类描述:获取应用程序的相关信息
  * 创建人:LXH
  */
public class AppInfoProvider {
  private PackageManager packageManager;
  //获取一个包管理器
  public AppInfoProvider(Context context){
  packageManager = context.getPackageManager();
  }
  /**
  *获取系统中所有应用信息,
  *并将应用软件信息保存到list列表中。
  **/
  public List<AppInfo> getAllApps(){
  List<AppInfo> list = new ArrayList<AppInfo>();
  AppInfo myAppInfo;
   //获取到所有安装了的应用程序的信息,包括那些卸载了的,但没有清除数据的应用程序
  List<PackageInfo> packageInfos = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
  for (PackageInfo info:packageInfos){
   myAppInfo = new AppInfo();
   //拿到包名
   String packageName = info.packageName;
   //拿到应用程序的信息
   ApplicationInfo appInfo = info.applicationInfo;
   //拿到应用程序的图标
   Drawable icon = appInfo.loadIcon(packageManager);
   //拿到应用程序的大小
   //long codesize = packageStats.codeSize;
   //Log.i("info", "-->"+codesize);
   //拿到应用程序的程序名
   String appName = appInfo.loadLabel(packageManager).toString();
   myAppInfo.setPackageName(packageName);
   myAppInfo.setAppName(appName);
   myAppInfo.setIcon(icon);
   
   if (filterApp(appInfo)){
   myAppInfo.setSystemApp( false );
   } else {
   myAppInfo.setSystemApp( true );
   }
   list.add(myAppInfo);
  }
  return list;
  }
  /**
  *判断某一个应用程序是不是系统的应用程序,
  *如果是返回true,否则返回false。
  */
  public boolean filterApp(ApplicationInfo info){
  //有些系统应用是可以更新的,如果用户自己下载了一个系统的应用来更新了原来的,它还是系统应用,这个就是判断这种情况的
  if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0 ){
   return true ;
  } else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0 ){ //判断是不是系统应用
   return true ;
  }
  return false ;
  }
}

与实例相关的Java类如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//AppInfo.java
package com.xh.ui;
import android.graphics.drawable.Drawable;
/**
  * 类名称:AppInfo
  * 类描述:应用程序类,包括了程序相关属性
  * 创建人:LXH
  */
public class AppInfo {
  private Drawable icon;
  private String appName;
  private String packageName;
  private boolean isSystemApp;
  private long codesize;
  public long getCodesize() {
  return codesize;
  }
  public void setCodesize( long codesize) {
  this .codesize = codesize;
  }
  public Drawable getIcon() {
  return icon;
  }
  public void setIcon(Drawable icon) {
  this .icon = icon;
  }
  public String getAppName() {
  return appName;
  }
  public void setAppName(String appName) {
  this .appName = appName;
  }
  public String getPackageName() {
  return packageName;
  }
  public void setPackageName(String packageName) {
  this .packageName = packageName;
  }
  public boolean isSystemApp() {
  return isSystemApp;
  }
  public void setSystemApp( boolean isSystemApp) {
  this .isSystemApp = isSystemApp;
  }
}

实例中配有详尽的注释,读者可以在理解程序功能的基础上根据自身项目需求加以改进和完善。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android实现获取应用程序相关信息列表的方法 的相关文章

随机推荐

  • Matroska文件的SRT Subtitle

    1 SRT简单介绍 SRT是一种比较流行的文本字幕 因为是文本格式 所以就比较小了 因为其制作规范简单 一句时间代码 一句字幕 使得制作修改就相当简单 配合上 style文件还能让srt自带一些字体上的特效等 SRT文件中的字幕包括四个部分
  • 批量调整word 图片大小

    打开文档后 按Alt F11 在左边Porject下找到ThisDocument 右键插入模块 贴上下面的Sub Macro For Each iShape In ActiveDocument InlineShapesiShape Heig
  • 【安卓学习之常见问题】文件分享--文件不存在

    安卓学习之常见问题 文件分享 文件不存在 系列文章目录 提示 这里是收集了和文件分享有关的文章 安卓学习之常见问题 android路径及文件问题 安卓学习之常见问题 文件分享 文件不存在 文章目录 安卓学习之常见问题 文件分享 文件不存在
  • LabVIEW深度相机与三维定位实战(下)

    博客主页 virobotics的CSDN博客 LabVIEW深度学习 人工智能博主 所属专栏 LabVIEW深度学习实战 上期文章 LabVIEW深度相机与三维定位实战 上 如觉得博主文章写的不错或对你有所帮助的话 还望大家多多支持呀 欢迎
  • 什么是内存泄漏,一看就懂,一学就会!!大白话解释内存泄漏!通俗易懂!

    在 32 位环境下 一个程序占用 4GB 的内存 其中 内核空间 是被操作系统占用的 我们没法直接干预 保留区域 也不用来存储数据 只用作一些特殊目的 比如 你可以让空指针指向这里 除了这两个区域 剩下的那些内存才是被我们自己编写的程序所占
  • Oracle数据库常见版本

    在Oracle数据库的发展中 数据库一直处于不断升级状态 有以下几个版本 Oracle 8 Oracle 8i Oracle 8i表示Oracle正式向Internet上开始发展 其中i表示就是internet Oracle 9i Orac
  • 带你玩转Spring Cloud Tencent(一)概述

    项目地址 spring cloud tencent 介绍 Spring Cloud Tencent 是腾讯开源的一站式微服务解决方案 Spring Cloud Tencent 实现了Spring Cloud 标准微服务 SPI 开发者可以基
  • PHP密码复杂性验证,JS检查密码强度 检查密码复杂度

    pass keyup function e var strongRegex new RegExp 8 A Z a z 0 9 W g var mediumRegex new RegExp 7 A Z a z A Z 0 9 a z 0 9
  • 电信光猫天翼网关usb插U盘共享文件

    ftp用不了 samba可以用 1 在电脑文件管理器中输入 192 168 1 1打开 在弹出框中输入光猫背后的账号密码登录即可打开共享的U盘 2 在手机ES文件管理器中 点右上角三点 新建 在弹出框中填入192 168 1 1和选择sam
  • Nginx 官网及中文官网

    英语官方 http nginx org 中文文档 http www nginx cn doc 转载于 https blog 51cto com hacker3389 1877270
  • 什么是大数据(转自知乎)

    声明 纯属个人收藏用 什么是大数据 大数据只是一个空洞的商业术语 就跟所谓的商业智能一样空洞无物 当然 这并不是说大数据没有意义 只是对于不同的人有不同的含义 A 对于投资人和创业者而言 大数据是个热门的融资标签 就和前几年流行的 SoLo
  • 磁盘快照技术

    一 概念解释 像照相机一样 机器快门一闪 很快就把刚刚的人像停留在了相纸上 存储系统中的数据 快照 与我们生活中所说的 照片 非常相似 所不同的是 照片的对象不是人 而是数据 如同照片留住了我们过去的摸样和岁月 快照把数据在某一时刻的映像也
  • 【数据结构】——顺序表介绍(独家介绍,小白必看!!)

    重点和易错点都用彩笔标记出来了 放心食用 数据结构分为线性表和非线性表 今天我们要学习的顺序表就是线性表中的一个小类 那么 何为线性表 线性表是指n个具有相同性质的数据元素的有限序列 常见的线性表有 顺序表 链表 栈 队列 字符串等等 注意
  • java非递归遍历二叉树 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 都说所有的递归都可以使用非递归的方式来解决 所以这次来一起康康非递归版本的二叉树的遍历 递归的本质就是不断往栈中塞入待执行代码 然后在代码块被执行的时候就会被调用执行
  • java时间格式化错误_java – SimpleDateFormat显示错误的分钟,秒和毫秒

    我已经编写了这个示例程序 我希望将日期转换为另一种格式 使用简单的日期格式时 我看不到预期的日期 public class TestDate param args public static void main String args Si
  • 聊一聊如何用IDEA追踪Bug?

    Debug用来追踪代码的运行流程 通常在程序运行过程中出现异常 启用Debug模式可以分析定位异常发生的位置 以及在运行过程中参数的变化 通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码 Debug开篇 首先看下ID
  • 仅仅上线一小时,下载量就破10W!阿里内部Java性能优化实战手册

    祸兮福之所倚福兮祸之所伏 上学的时候对这句话不以为然 但是在社会上走的时间越长越觉得有道理 前不久好兄弟和领导闹矛盾裸辞了 身为好兄弟的我总不能干看着吧 总要帮他找工作的 你们应该不会想我和他一起裸辞吧 大学的师兄有好几个在大厂 平常关系还
  • 在 Dockerfile 中 CMD 和ENTRYPOINT可以混着用吗?

    在 Dockerfile 中 CMD 和ENTRYPOINT可以混着用吗 在 Dockerfile 中 CMD 和 ENTRYPOINT 是两个不同的指令 它们可以单独使用 也可以结合使用 CMD 指令用于指定容器启动时默认执行的命令 它可
  • 利用回调函数消灭大量分支语句if,case

    1 背景 有这样一个场景 常见的通讯程序中 根据不同的消息类型 调用不同的处理函数 类似于处理登陆 退出登陆 发送消息等类型 上古操作可能会是这样的代码 void dealLogin std cout lt lt received logi
  • Android实现获取应用程序相关信息列表的方法

    本文所述为Androdi获取手机应用列表的方法 比如获取到Android应用的软件属性 大小和应用程序路径 应用名称等 获取所有已安装的Android应用列表 包括那些卸载了的 但没有清除数据的应用程序 同时在获取到应用信息的时候 判断是不