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

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

 }

}

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

时间: 2024-08-03 15:00:09

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

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

本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:  第一部分: 获取应用程序的packagename.label.icon等 :             第二部分:获取应用程序的占用大小,包括:缓存大小(cachsize).数据大小(datasize). 每部分都为您准备了简单丰富的实例,您一定不会错过. Android系统为我们提供了很多服务管理的类,包括ActivityManager.Pow

Android中获取应用程序(包)的信息

本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:  第一部分: 获取应用程序的packagename.label.icon等 :             第二部分:获取应用程序的占用大小,包括:缓存大小(cachsize).数据大小(datasize). 每部分都为您准备了简单丰富的实例,您一定不会错过. Android系统为我们提供了很多服务管理的类,包括ActivityManager.Pow

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

本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:   第一部分: 获取应用程序的packagename.label.icon等 :             第二部分:获取应用程序的占用大小,包括:缓存大小(cachsize).数据大小(datasize). 每部分都为您准备了简单丰富的实例,您一定不会错过. Android系统为我们提供了很多服务管理的类,包括ActivityManager.Po

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

通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识. 本部分的内容是如何获取安装包得大小,包括缓存大小(cachesize).数据大小(datasize).应用程序大小(codesize). 本部分的知识点涉及到AIDL.Java反射机制.理解起来也不是很难. 关于安装包得大小信息封装在Packag

Android JNI 获取应用程序签名

使用Android JNI 获取应用程序签名. 获取基础上生成自己的签名password,这可以防止别人反编译找到自己的源代码password. jstring Java_com_masonsdk_jni_JNIUtil_getPWD(JNIEnv* env, jobject thizz ,jobject thiz ){ jclass native_clazz = env->GetObjectClass(thiz); // 得到 getPackageManager 方法的 ID jmethodI

C#获取电脑的相关信息

/* 创建者:菜刀居士的博客 * 创建日期: 2014年08月31号 * 功能:获取电脑的相关信息 * */ namespace Net.String.ConsoleApplication { using System; using System.Management; public class ComputerHelper { /// <summary> /// 获取CPU序列号代码 /// </summary> public static string GetCPUId() {

获取Java系统相关信息

1 package com.test; 2 3 import java.util.Properties; 4 import java.util.Map.Entry; 5 6 import org.junit.Test; 7 8 public class SystemTest { 9 10 /** 11 * 获取Java系统相关信息 12 * @throws Exception 13 */ 14 @Test 15 public void testSys() throws Exception { 1

C#:获取设备电量相关信息

[DllImport("kernel32.dll",EntryPoint="GetSystemPowerStatus")] //win32 api private static extern void GetSystemPowerStatus(ref SYSTEM_POWER_STATUS lpSystemPowerStatus); public struct SYSTEM_POWER_STATUS //结构体 { public Byte ACLineStatus;

Web技术相关信息列表

http://baike.baidu.com/view/15906.htm#rs_15906_5829 Web技术相关信息列表 WEB技术 HTML XHTML ? HTML 5 ? CSS ? TCP/IP XML XML ? XSL ? XSLT ? XSL-FO ? XPath ? XPointer ? XLink ? DTD ? XML Schema ? DOM ? XForms? SOAP ? WSDL ? RDF ? RSS ? WAP ? Web Services Web脚本 Ja