Andriod PackageManager使用

1.获取系统应用程序列表

Android系统提供了很多服务管理类,包括ActivityManager,PowerManager,AudioManager,PackageManager

PackageManager的功能:

.安装,卸载应用

.查询Permission相关信息

.查询Aplication相关信息(application,activity,receiver,service,provider及相应属性等)

.查询已经安装的应用

.清除用户数据,缓存,代码段等

.显示系统安装的应用程序列表或者系统程序列表

相关类的介绍:

PackageItemInfo

说明:androidManifest.xml文件中所有节点的基类。提供了这些节点的基本信息:label,icon,meta -data,他并不是直接使用的,而是由子类继承然后调用相应的方法

常用字段:

public int icon:获取该资源图片在R文件的值(对应于android:icon属性)

public int label:获取该label对应R文件的值(对应于android:label属性)

public String name:获取该节点的name(对应于android:name属性)

public String packagename:获取该应用程序包名(对应于android:packageName属性)

常用方法:

Drawabel loadIcon(PackaManager pm):获取当前应用程序的图像

CharSequence loadLabel(PackageManager pm):获取当前应用程序的label

2.ActivityInfo类:

继承自PackageItemInfo

说明:获取应用程序中<activity/>获取<receiver/>节点信息

我们可以通过它来获取我们设置的任何属性,包括:theme,launchMode等

常用的方法继承至PackageIntemInfo类中的loadIcon()和loadLabel()

3.ServiceInfo类

说明:同ActivityInfo类似,同样的继承自PackageItemInfo,只不过它表示是<service>节点信息

4.ApplicationInfo类:

继承自PackageItemInfo

说明:获取一个特定应用程序中<application>节点的

字段说明:

flags字段:FLAG_SYSTEM 系统应用程序

FLAG_EXTERNAL_STORAGE 表示该应用安装在sdcard中

常用的方法继承至:packageItemInfo类中的LoadIcon()和loadLabel()

5.ResolveInfo类:

说明:根据<Intent>节点来获取上一层目录的信息,通常是<activity>,<receiver>,<service>节点信息。

常用字段:

public ActivityInfo activiInfo获取activityInfo对象,即<activity>或<receiver>节点信息

public ServiceInfo  serviceInfo 获取ServiceInfo对象,即<activity>节点信息

常用方法:

Drawabel loadIcon(PackaManager pm):获取当前应用程序的图像

CharSequence loadLabel(PackageManager pm):获取当前应用程序的label

6.PackageInfo类

说明:获取AndroidManifest.xml字段信息

常用字段信息:

public String packageName

public ActivityInfo[]activities

public ApplicationInfo applicationInfo

public ActivityInfo[]receiver

public ServiceInfo[]services

7.PackageManager

说明:获取系统安装的程序

可以通过:getPackageManager() 方法获取

常用的方法:

public abstract PackageManager getPackageManager()

public abstract Drawable getApplicationIcon(String packageName)

public abstract  ApplicationInfo getApplicationInfo(String packageName,int flags)

public abstract List<ApplicationInfo>getInstalledApplication(int flags)

方法说明:flags一般是进行过滤使用的,flages一般:GET_UNINSTALLED_PACKAGE,那么返回所以的ApplicationInfo.我们可以通过ApplicationInfo的flags过滤,得到我们需要的

public abstract List<PackageInfo>getInstalledPackage(int flags)

public abstract ResolveInfo resolverActivity(Intent intent,int flags)

参数:Intent查询条件,Activity所配置的action和category flags:MATCH_DEFAULT_ONLY,category:必须带有CATEGORY_DEFAULT的Activity,才匹配GET_INTENT_FILTER:匹配Intent条件即可,GET_RESOLVED_FILTER:匹配Intent条件即可

功能:返回给定条件的ResolverInfo对象(本质上是Activity)

public abstract List<ResolveInfo>queryIntentActivities(Intent intent,int flags)

功能:返回给定条件的所有ResolveInfo对象(本质上是Activity),集合对象

public abstract ResolveInfo resolveService(Intent intent,int flags)

功能:返回给定条件的ResolveInfo对象(本质上是Service)

public abstract List<ResolveInfo>queryIntentServices(Intent intent,int flags)

功能:返回给定条件的所有ResolveInfo对象(本质上是Service),集合对象

List<PackageInfo> packs = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);

Intent intent=new Intent();

intent.setAction(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_LAUNCHER);

List<ResolveInfo>resolveInfos=(List<ResolveInfo>) pm.queryIntentActivities(intent, PackageManager.GET_UNINSTALLED_PACKAGES);

for(ResolveInfo info:resolveInfos){

HashMap<String, Object> map = new HashMap<String, Object>();

map.put("icon",info.loadIcon(pm));

map.put("appName",info.loadLabel(pm));

map.put("packageName",info.activityInfo.packageName);

items.add(map);

}

Andriod PackageManager使用

时间: 2024-07-30 15:41:09

Andriod PackageManager使用的相关文章

搭建Andriod开发环境

上一篇文章中总结了Andriod系统架构以及系统移植要点,为了进行Andriod系统移植,需要搭建相应开发环境,包括:JDK.SDK(adt).NDK(cdt)以及arm-Linux交叉编译环境等.我的平台以Linux虚拟机为背景,以下为详细步骤: JDK安装: 可以先下载安装再配置环境变量,或者直接在Terminal下执行以下代码一次性完成: # add-apt-respository "deb http://archive.canonical.com/ lucid partner" # ap

andriod 获得应用程序名称

import android.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.o

iOS 开发笔记-andriod/java/iOS三方AES通用加密

移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,就几种语言的加密都实践了一遍,实现了.NET,java(andriod),iOS都同一套的加密算法,下面就分享给大家. AES加密有多种算法模式,下面提供两套模式的可用源码. 加密方式: 先将文本AES加密 返回Base64转码 解密方式: 将数据进行Base64解码 进行AES解密 一.CBC(Cipher Block Chaining,加密块链)模式 是一种循

Begin Andriod -- 安装android开发环境

很久以前学过Andriod,现在已经忘的快没有了,重新捡起来练练,顺带写写博客,感受下写博的乐趣. 第一步:安装java jdk.jre(jdk:开发环境,jre:运行环境). (一)java jdk区别(来源网络) 1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.Java SE 包含了支持 Java Web 服务开发的类,并为 Java P

Andriod布局之LinearLayout

LinearLayout是安卓中的常见布局,即线性布局.(提示:在Andriod中要常用alt+/快捷键来补全代码 其中有一个重要的属性android:orientation,它是表示线性布局的方向问题. 常见的这种布局案例有,计算器界面布局,下面就粘上代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.andro

andriod first app-computer

个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:java ; 编程坏境:Windows 7 专业版 x64; 编程工具:jdk,eclipse,AVD; 制图工具:office 2010 powerpoint; 硬件信息:7G-3 笔记本; 自己想说的话 以前没有接触过andriod开发,突然接触后感觉很喜欢,难度不是很大,今天自己写了一个andr

andriod + @的区别

Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值. id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等. 如果在@后面使用“+”,表示当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量. 变量名就是“/”后面的值,例如,@+id/xyz会在R.java文件中生成int xyz = value,其中value是一个十六进制的数. 如果xyz在R.java中已经存在同名的变量,就不再

cocos2d-x v3.0的window平台搭建和编译成andriod程序

首先添加这个地址到系统环境变量,path 然后打开CMD,输入如下语句 现在就可以创建一个新项目了 这样一个空的cocos2d-x v3.0的项目就创建好了 接下来编译andriod程序 先在系统环境变量中添加一个NDK_ROOT 然后打开cmd 然后就开始编译了 接下来打开ADT中的eclipse 再添加andriod文件夹到工程里 cocos2d-x v3.0的window平台搭建和编译成andriod程序,布布扣,bubuko.com

Andriod常用控件介绍&amp;相关属性(初学方便查询)

一.TextView(显示控件) android:id(给当前控件定义唯一的标识符)--示例:android:id = "@+id/text_view" android:layout_width(指定控件的宽度)--示例:andriod:layout_width = "match_parent" android:layout_heigtht(指定控件的高度)--示例:andriod:layout_height = "wrap_content" 可