本文所述为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;
 }
}

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

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

  1. Android中获取应用程序(包)的信息----PackageManager

    本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:   第一部分: 获取应用程序的packagena ...

  2. Android中获取应用程序(包)的信息-----PackageManager的使用(一)

    本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:  第一部分: 获取应用程序的packagenam ...

  3. Android中获取应用程序(包)的信息-----PackageManager的使用

    本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下: 第一部分: 获取应用程序的packagename ...

  4. 【转】Android中获取应用程序(包)的信息-----PackageManager的使用(一)

    转载请注明出处:http://blog.csdn.net/qinjuning       本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占 ...

  5. Android中获取应用程序(包)的大小-----PackageManager的使用(二)

    通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidMani ...

  6. Android JNI 获取应用程序签名

    使用Android JNI 获取应用程序签名. 获取基础上生成自己的签名password,这可以防止别人反编译找到自己的源代码password. jstring Java_com_masonsdk_j ...

  7. .Net中获取打印机的相关信息

    原文:.Net中获取打印机的相关信息 新项目中牵涉到对打印机的一些操作,最重要的莫过于获取打印机的状态,IP等信息,代码量不大,但是也是自己花了一点时间总结出来的,希望能帮助需要的朋友. Printe ...

  8. 获取Java系统相关信息

    package com.test; import java.util.Properties; import java.util.Map.Entry; import org.junit.Test; pu ...

  9. Cordova各个插件使用介绍系列(六)—$cordovaDevice获取设备的相关信息

    详情请看:Cordova各个插件使用介绍系列(六)—$cordovaDevice获取设备的相关信息 在项目中需要获取到当前设备,例如手机的ID,联网状态,等,然后这个Cordova里有这个插件可以用, ...

随机推荐

  1. (C)学生成绩管理系统

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h&g ...

  2. sim卡中短信简要格式

    //SELECT A0 A4 00 00 02 3F 00 9F 17 //A0 A4 00 00 02 是命令头,CLA = A0表示GSM应用,INS = A4 表示SELECT,P1 P2 =  ...

  3. WINDOWS硬件通知应用程序的常方法(五种方式:异步过程调用APC,事件方式VxD,消息方式,异步I/O方式,事件方式WDM)

    摘要:在目前流行的Windows操作系统中,设备驱动程序是操纵硬件的最底层软件接口.为了共享在设备驱动程序设计过程中的经验,给出设备驱动程序通知应用程序的5种方法,详细说明每种方法的原理和实现过程,并 ...

  4. android中获取root权限的方法以及原理(转)

    一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...

  5. Spring AOP AspectJ Pointcut 表达式例子

    主要来源:http://howtodoinjava.com/spring/spring-aop/writing-spring-aop-aspectj-pointcut-expressions-with ...

  6. 基于eclipse的mybatis映射代码自动生成的插件http://blog.csdn.net/fu9958/article/details/7521681

    基于eclipse的mybatis映射代码自动生成的插件 分类: JAVA 数据库 工具相关2012-04-29 00:15 2157人阅读 评论(9) 收藏 举报 eclipsegeneratori ...

  7. MFC数据类型(data types)

    为便于理解MFC库函数中的各种形参,现将MFC中常见的参数类型总结如下: 下面这些是和Win32程序(SDK程序)共同使用的数据类型: 数据类型 意义 BOOL Boolean值(布尔值,不是TRUE ...

  8. css中的media

    说起CSS3的新特性,就不得不提到 Media Queries .最近 Max Design 更新的一个泛读列表里,赫然就有关于 Media Queries 的文章.同时位列其中的也有前天我刚刚翻译的 ...

  9. 使用 AngularJS 从零构建大型应用

    0.导言 1.准备工作 2.构建框架 3.丰富你的directives 4.公用的services 5.用controllers组织业务 导言 纵览线上各种AngularJS教程,大部分都是基础与一些 ...

  10. 一键搞定Java桌面应用安装部署 —— exe4j + Inno Setup 带着JRE, 8M起飞

    转载自:http://www.blogjava.net/huliqing/archive/2008/04/18/193907.html 对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是 ...