Android实现获取系统应用列表.docx

上传人:b****8 文档编号:12725300 上传时间:2023-06-07 格式:DOCX 页数:14 大小:202.85KB
下载 相关 举报
Android实现获取系统应用列表.docx_第1页
第1页 / 共14页
Android实现获取系统应用列表.docx_第2页
第2页 / 共14页
Android实现获取系统应用列表.docx_第3页
第3页 / 共14页
Android实现获取系统应用列表.docx_第4页
第4页 / 共14页
Android实现获取系统应用列表.docx_第5页
第5页 / 共14页
Android实现获取系统应用列表.docx_第6页
第6页 / 共14页
Android实现获取系统应用列表.docx_第7页
第7页 / 共14页
Android实现获取系统应用列表.docx_第8页
第8页 / 共14页
Android实现获取系统应用列表.docx_第9页
第9页 / 共14页
Android实现获取系统应用列表.docx_第10页
第10页 / 共14页
Android实现获取系统应用列表.docx_第11页
第11页 / 共14页
Android实现获取系统应用列表.docx_第12页
第12页 / 共14页
Android实现获取系统应用列表.docx_第13页
第13页 / 共14页
Android实现获取系统应用列表.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Android实现获取系统应用列表.docx

《Android实现获取系统应用列表.docx》由会员分享,可在线阅读,更多相关《Android实现获取系统应用列表.docx(14页珍藏版)》请在冰点文库上搜索。

Android实现获取系统应用列表.docx

Android实现获取系统应用列表

Android实现获取系统应用列表

本文介绍在Android中如何获取系统应用程序列表。

Android系统为我们提供了很多服务管理的类,包括ActivityManager、PowerManager(电源管理)、AudioManager(音频管理)等。

除此之外,还提供了一个PackageManger管理类,它的主要职责是管理应用程序包。

通过它,我们就可以获取应用程序信息。

PackageManager的功能:

•安装,卸载应用

•查询permission相关信息

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

•查询已安装应用

•增加,删除permission

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

我们可以用PackageManager来显示系统安装的应用程序列表或者系统程序列表

相关类的介绍

PackageItemInfo类

说明:

AndroidManifest.xml文件中所有节点的基类,提供了这些节点的基本信息:

alabel、icon、meta-data。

它并不直接使用,而是由子类继承然后调用相应方法。

常用字段:

publicinticon获得该资源图片在R文件中的值(对应于android:

icon属性)

publicintlabelRes获得该label在R文件中的值(对应于android:

label属性)

publicStringname获得该节点的name值(对应于android:

name属性)

publicStringpackagename获得该应用程序的包名(对应于android:

packagename属性)

常用方法:

DrawableloadIcon(PackageManagerpm)获得当前应用程序的图像

CharSequenceloadLabel(PackageManagerpm)获得当前应用程序的label

ActivityInfo类

继承自PackageItemInfo

说明:

获得应用程序中或者节点的信息。

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

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

ServiceInfo类

说明:

同ActivityInfo类似,同样继承自PackageItemInfo,只不过它表示的是节点信息。

ApplicationInfo类

继承自PackageItemInfo

说明:

获取一个特定引用程序中节点的信息。

字段说明:

   

flags字段:

FLAG_SYSTEM 系统应用程序      

FLAG_EXTERNAL_STORAGE 表示该应用安装在sdcard中

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

ResolveInfo类

说明:

根据节点来获取其上一层目录的信息,通常是节点信息。

常用字段:

publicActivityInfoactivityInfo获取ActivityInfo对象,即节点信息

publicServiceInfoserviceInfo获取ServiceInfo对象,即节点信息

常用方法:

DrawableloadIcon(PackageManagerpm)获得当前应用程序的图像

CharSequenceloadLabel(PackageManagerpm)获得当前应用程序的label

PackageInfo类

说明:

手动获取AndroidManifest.xml文件的信息。

常用字段:

publicStringpackageName包名

publicActivityInfo[]activities所有节点信息

publicApplicationInfoapplicationInfo节点信息,只有一个

publicActivityInfo[]receivers所有节点信息,多个

publicServiceInfo[]services所有节点信息,多个

PackageManger类

说明:

获得已安装的应用程序信息。

可以通过getPackageManager()方法获得。

常用方法:

publicabstractPackageManagergetPackageManager()

功能:

获得一个PackageManger对象

publicabstractDrawablegetApplicationIcon(StringpackageName)

参数:

packageName包名

功能:

返回给定包名的图标,否则返回null

publicabstractApplicationInfogetApplicationInfo(StringpackageName,intflags)

参数:

packagename包名flags该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可

功能:

返回该ApplicationInfo对象

publicabstractListgetInstalledApplications(intflags)

参数:

flag为一般为GET_UNINSTALLED_PACKAGES,那么此时会返回所有ApplicationInfo。

我们可以对ApplicationInfo的flags过滤,得到我们需要的。

功能:

返回给定条件的所有PackageInfo

publicabstractListgetInstalledPackages(intflags)

参数如上

功能:

返回给定条件的所有PackageInfo

publicabstractResolveInforesolveActivity(Intentintent,intflags)

参数:

intent查寻条件,Activity所配置的action和categoryflags:

MATCH_DEFAULT_ONLY:

Category必须带有CATEGORY_DEFAULT的Activity,才匹配GET_INTENT_FILTERS:

匹配Intent条件即可GET_RESOLVED_FILTER:

匹配Intent条件即可功能:

返回给定条件的ResolveInfo对象(本质上是Activity)

publicabstractListqueryIntentActivities(Intentintent,intflags)

参数同上

功能:

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

publicabstractResolveInforesolveService(Intentintent,intflags)

参数同上

功能:

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

publicabstractListqueryIntentServices(Intentintent,intflags)

参数同上

功能:

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

运行示例如下图所示:

项目工程结构图:

MainActivity:

packagecom.manager.test;

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.content.pm.ApplicationInfo;

importandroid.content.pm.PackageInfo;

importandroid.content.pm.PackageManager;

importandroid.graphics.drawable.Drawable;

importandroid.os.Bundle;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.ImageView;

importandroid.widget.ListView;

importandroid.widget.SimpleAdapter;

importandroid.widget.TextView;

/**

*使用PackManager示例

*@Description:

获取Android系统应用程序

*@FileName:

MainActivity.java

*@Packagecom.manager.test

*@VersionV1.0

*/

publicclassMainActivityextendsActivity{

privateListViewlv;

privateMyAdapteradapter;

ArrayList>items=newArrayList>();

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

lv=(ListView)findViewById(R.id.lv);

//得到PackageManager对象

PackageManagerpm=getPackageManager();

//得到系统安装的所有程序包的PackageInfo对象

//Listpacks=pm.getInstalledApplications(0);

Listpacks=pm.getInstalledPackages(0);

for(PackageInfopi:

packs){

HashMapmap=newHashMap();

////显示用户安装的应用程序,而不显示系统程序

//if((pi.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0&&

//(pi.applicationInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)==0){

////这将会显示所有安装的应用程序,包括系统应用程序

//map.put("icon",pi.applicationInfo.loadIcon(pm));//图标

//map.put("appName",pi.applicationInfo.loadLabel(pm));//应用程序名称

//map.put("packageName",pi.applicationInfo.packageName);//应用程序包名

//

////循环读取并存到HashMap中,再增加到ArrayList上,一个HashMap就是一项

//items.add(map);

//}

//这将会显示所有安装的应用程序,包括系统应用程序

map.put("icon",pi.applicationInfo.loadIcon(pm));//图标

map.put("appName",pi.applicationInfo.loadLabel(pm));//应用程序名称

map.put("packageName",pi.applicationInfo.packageName);//应用程序包名

//循环读取并存到HashMap中,再增加到ArrayList上,一个HashMap就是一项

items.add(map);

}

/**

*参数:

Context

*ArrayList(item的集合)

*item的layout

*包含ArrayList中的HashMap的key的数组

*key所对应的值的相应的控件id

*/

adapter=newMyAdapter(this,items,R.layout.list_item,

newString[]{"icon","appName","packageName"},

newint[]{R.id.icon,R.id.appName,R.id.packageName});

lv.setAdapter(adapter);

}

}

/**

*自定义适配器

*@Description:

自定义适配器

*@FileName:

MainActivity.java

*@Packagecom.manager.test

*@AuthorHanyongjian

*@Date2012-3-6上午08:

42:

48

*@VersionV1.0

*/

classMyAdapterextendsSimpleAdapter

{

privateint[]appTo;

privateString[]appFrom;

privateViewBinderappViewBinder;

privateList

extendsMap

>>appData;

privateintappResource;

privateLayoutInflaterappInflater;

/**

*构造器

*@paramcontext

*@paramdata

*@paramresource

*@paramfrom

*@paramto

*/

publicMyAdapter(Contextcontext,List

extendsMap

>>data,

intresource,String[]from,int[]to){

super(context,data,resource,from,to);

appData=data;

appResource=resource;

appFrom=from;

appTo=to;

appInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){

returncreateViewFromResource(position,convertView,parent,appResource);

}

privateViewcreateViewFromResource(intposition,ViewconvertView,ViewGroupparent,intresource){

Viewv;

if(convertView==null){

v=appInflater.inflate(resource,parent,false);

finalint[]to=appTo;

finalintcount=to.length;

finalView[]holder=newView[count];

for(inti=0;i

holder[i]=v.findViewById(to[i]);

}

v.setTag(holder);

}else{

v=convertView;

}

bindView(position,v);

returnv;

}

privatevoidbindView(intposition,Viewview){

finalMapdataSet=appData.get(position);

if(dataSet==null){

return;

}

finalViewBinderbinder=appViewBinder;

finalView[]holder=(View[])view.getTag();

finalString[]from=appFrom;

finalint[]to=appTo;

finalintcount=to.length;

for(inti=0;i

finalViewv=holder[i];

if(v!

=null){

finalObjectdata=dataSet.get(from[i]);

Stringtext=data==null?

"":

data.toString();

if(text==null){

text="";

}

booleanbound=false;

if(binder!

=null){

bound=binder.setViewValue(v,data,text);

}

if(!

bound){

/**

*自定义适配器,关在在这里,根据传递过来的控件以及值的数据类型,

*执行相应的方法,可以根据自己需要自行添加if语句。

另外,CheckBox等

*集成自TextView的控件也会被识别成TextView,这就需要判断值的类型

*/

if(vinstanceofTextView){

//如果是TextView控件,则调用SimpleAdapter自带的方法,设置文本

setViewText((TextView)v,text);

}elseif(vinstanceofImageView){

//如果是ImageView控件,调用自己写的方法,设置图片

setViewImage((ImageView)v,(Drawable)data);

}else{

thrownewIllegalStateException(v.getClass().getName()+"isnota"+

"viewthatcanbeboundsbythisSimpleAdapter");

}

}

}

}

}

publicvoidsetViewImage(ImageViewv,Drawablevalue)

{

v.setImageDrawable(value);

}

}

main.xml:

xmlversion="1.0"encoding="utf-8"?

>

android="

android:

orientation="vertical"android:

layout_width="fill_parent"

android:

layout_height="fill_parent">

android:

id="@+id/lv"

android:

layout_width="fill_parent"

android:

layout_height="fill_parent">

效果图:

完毕。

^_^

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2