ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:202.85KB ,
资源ID:12725300      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-12725300.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android实现获取系统应用列表.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、Android实现获取系统应用列表Android实现获取系统应用列表本文介绍在Android中如何获取系统应用程序列表。 Android系统为我们提供了很多服务管理的类,包括ActivityManager、PowerManager(电源管理)、AudioManager(音频管理) 等。除此之外,还提供了一个PackageManger管理类,它的主要职责是管理应用程序包。 通过它,我们就可以获取应用程序信息。 PackageManager的功能:安装,卸载应用查询permission相关信息查询Application相关信息(application,activity,receiver,servi

2、ce,provider及相应属性等)查询已安装应用增加,删除permission清除用户数据、缓存,代码段等我们可以用PackageManager来显示系统安装的应用程序列表或者系统程序列表 相关类的介绍PackageItemInfo类说明: AndroidManifest.xml文件中所有节点的基类,提供了这些节点的基本信息:a label、icon、 meta-data。它并不 直接使用,而是由子类继承然后调用相应方法。 常用字段:public int icon 获得该资源图片在R文件中的值 (对应于android:icon属性)public int labelRes 获得该label在R

3、文件中的值(对应于android:label属性)public String name 获得该节点的name值 (对应于android:name属性)public String packagename 获得该应用程序的包名 (对应于android:packagename属性) 常用方法:Drawable loadIcon(PackageManager pm) 获得当前应用程序的图像CharSequence loadLabel(PackageManager pm) 获得当前应用程序的label ActivityInfo类继承自 PackageItemInfo说明: 获得应用程序中或者 节点的信息

4、 。我们可以通过它来获取我们设置的任何属性,包括 theme 、launchMode、launchmode等常用方法继承至PackageItemInfo类中的loadIcon()和loadLabel() ServiceInfo 类说明: 同ActivityInfo类似 ,同样继承自 PackageItemInfo,只不过它表示的是节点信息。 ApplicationInfo类继承自 PackageItemInfo说明:获取一个特定引用程序中节点的信息。字段说明: flags字段: FLAG_SYSTEM系统应用程序 FLAG_EXTERNAL_STORAGE表示该应用安装在sdcard中 常用方

5、法继承至PackageItemInfo类中的loadIcon()和loadLabel() ResolveInfo类说明:根据节点来获取其上一层目录的信息,通常是、节点信息。常用字段:public ActivityInfo activityInfo 获取 ActivityInfo对象,即或节点信息public ServiceInfo serviceInfo 获取 ServiceInfo对象,即节点信息 常用方法:Drawable loadIcon(PackageManager pm) 获得当前应用程序的图像CharSequence loadLabel(PackageManager pm) 获得当

6、前应用程序的label PackageInfo类说明:手动获取AndroidManifest.xml文件的信息 。常用字段:public String packageName 包名public ActivityInfo activities 所有节点信息public ApplicationInfo applicationInfo 节点信息,只有一个public ActivityInfo receivers 所有节点信息,多个public ServiceInfo services 所有节点信息 ,多个 PackageManger 类说明: 获得已安装的应用程序信息 。可以通过getPackage

7、Manager()方法获得。 常用方法:public abstract PackageManager getPackageManager()功能:获得一个PackageManger对象 public abstrac tDrawable getApplicationIcon(StringpackageName)参数: packageName 包名功能:返回给定包名的图标,否则返回null public abstract ApplicationInfo getApplicationInfo(String packageName, int flags)参数:packagename 包名 flags

8、该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可功能:返回该ApplicationInfo对象 public abstract List getInstalledApplications(int flags)参数:flag为一般为GET_UNINSTALLED_PACKAGES,那么此时会返回所有ApplicationInfo。我们可以对ApplicationInfo 的flags过滤,得到我们需要的。功能:返回给定条件的所有PackageInfo public abstract List getInstalledPackages(int flags)参数如上功能

9、:返回给定条件的所有PackageInfo public abstractResolveInfo resolveActivity(Intent intent, int flags)参数: intent 查寻条件,Activity所配置的action和category flags: MATCH_DEFAULT_ONLY :Category必须带有CATEGORY_DEFAULT的Activity,才匹配 GET_INTENT_FILTERS :匹配Intent条件即可 GET_RESOLVED_FILTER :匹配Intent条件即可 功能 :返回给定条件的ResolveInfo对象(本质上是A

10、ctivity) public abstract List queryIntentActivities(Intent intent, int flags)参数同上功能 :返回给定条件的所有ResolveInfo对象(本质上是Activity),集合对象 public abstract ResolveInfo resolveService(Intent intent, int flags)参数同上功能 :返回给定条件的ResolveInfo对象(本质上是Service) public abstract List queryIntentServices(Intent intent, int fla

11、gs)参数同上功能 :返回给定条件的所有ResolveInfo对象(本质上是Service),集合对象运行示例如下图所示:项目工程结构图:MainActivity:package com.manager.test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Context;import android.content.pm.ApplicationIn

12、fo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.ListVie

13、w;import android.widget.SimpleAdapter;import android.widget.TextView;/* * 使用PackManager示例 * Description: 获取Android系统应用程序 * FileName: MainActivity.java * Package com.manager.test * Version V1.0 */public class MainActivity extends Activity private ListView lv; private MyAdapter adapter; ArrayListHashM

14、ap items = new ArrayListHashMap(); Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); lv = (ListView)findViewById(R.id.lv); /得到PackageManager对象 PackageManager pm = getPackageManager(); /得到系统安装的所有程序包的PackageInfo对象 /List packs =

15、pm.getInstalledApplications(0); List packs = pm.getInstalledPackages(0); for(PackageInfo pi:packs) HashMap map = new HashMap(); /显示用户安装的应用程序,而不显示系统程序 / if(pi.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)=0& / (pi.applicationInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)=0) /这将会显示所有安装的应用程序,

16、包括系统应用程序 / 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.applic

17、ationInfo.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所对应的值的

18、相应的控件id */ adapter = new MyAdapter(this, items, R.layout.list_item, new Stringicon, appName, packageName, new intR.id.icon, R.id.appName, R.id.packageName); lv.setAdapter(adapter); /* * 自定义适配器 * Description:自定义适配器 * FileName: MainActivity.java * Package com.manager.test * Author Hanyongjian * Date 2

19、012-3-6 上午08:42:48 * Version V1.0 */class MyAdapter extends SimpleAdapter private int appTo; private String appFrom; private ViewBinder appViewBinder; private List? extends Map appData; private int appResource; private LayoutInflater appInflater; /* * 构造器 * param context * param data * param resourc

20、e * param from * param to */ public MyAdapter(Context context, List? extends Map data, int resource, String from, int to) super(context, data, resource, from, to); appData = data; appResource = resource; appFrom = from; appTo = to; appInflater = (LayoutInflater)context.getSystemService(Context.LAYOU

21、T_INFLATER_SERVICE); public View getView(int position, View convertView, ViewGroup parent) return createViewFromResource(position, convertView, parent, appResource); private View createViewFromResource(int position, View convertView, ViewGroup parent, int resource) View v; if(convertView = null) v =

22、 appInflater.inflate(resource, parent,false); final int to = appTo; final int count = to.length; final View holder = new Viewcount; for(int i = 0; i count; i+) holderi = v.findViewById(toi); v.setTag(holder); else v = convertView; bindView(position, v); return v; private void bindView(int position,

23、View view) final Map dataSet = appData.get(position); if(dataSet = null) return; final ViewBinder binder = appViewBinder; final View holder = (View)view.getTag(); final String from = appFrom; final int to = appTo; final int count = to.length; for(int i = 0; i count; i+) final View v = holderi; if(v

24、!= null) final Object data = dataSet.get(fromi); String text = data = null ? :data.toString(); if(text = null) text = ; boolean bound = false; if(binder != null) bound = binder.setViewValue(v, data, text); if(!bound) /* * 自定义适配器,关在在这里,根据传递过来的控件以及值的数据类型, * 执行相应的方法,可以根据自己需要自行添加if语句。另外,CheckBox等 * 集成自T

25、extView的控件也会被识别成TextView,这就需要判断值的类型 */ if(v instanceof TextView) /如果是TextView控件,则调用SimpleAdapter自带的方法,设置文本 setViewText(TextView)v, text); else if(v instanceof ImageView) /如果是ImageView控件,调用自己写的方法,设置图片 setViewImage(ImageView)v, (Drawable)data); else throw new IllegalStateException(v.getClass().getName() + is not a + view that can be bounds by this SimpleAdapter); public void setViewImage(ImageView v, Drawable value) v.setImageDrawable(value); main.xml: 效果图:完毕。_

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

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