步骤
- 获得上下文Context,调用getPackageManager()获得PackageManager实例
- PackageManager实例,调用getInstalledPackages(int flag)并传入flag值获得相应已安装包信息PackageInfo列表
示例代码:
package dyingbleed.iteye;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class Main extends ListActivity {
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int what = msg.what;
switch(what) {
case 0 :
List<APP> data = (List<APP>) msg.obj;
setListAdapter(new APPListViewAdapter(Main.this, data));
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Thread(new InstalledAPPTask()).start();
}
private class APPListViewAdapter extends BaseAdapter {
private Context context;
private List<APP> data;
public APPListViewAdapter(Context context, List<APP> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
}
ImageView icon = (ImageView) convertView.findViewById(R.id.item_IconImageView);
TextView name = (TextView) convertView.findViewById(R.id.item_NameTextView);
TextView packageName = (TextView) convertView.findViewById(R.id.item_PackageNameTextView);
TextView versionName = (TextView) convertView.findViewById(R.id.item_VersionNameTextView);
icon.setImageDrawable(data.get(position).getIcon());
name.setText(data.get(position).getName());
packageName.setText(data.get(position).getPackageName());
versionName.setText(data.get(position).getVersionName());
return convertView;
}
}
private class InstalledAPPTask implements Runnable {
@Override
public void run() {
List<APP> appList = achieveAPPList();
handler.sendMessage(handler.obtainMessage(0, appList));
}
private List<APP> achieveAPPList() {
List<APP> result = new ArrayList<APP>();
List<PackageInfo> packageInfoList = getPackageManager().getInstalledPackages(0); //返回已安装的包信息列表
for(PackageInfo packageInfo : packageInfoList) {
/*
* 判断是否为非系统应用
* */
if((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0) {
APP app = new APP();
app.setIcon(packageInfo.applicationInfo.loadIcon(getPackageManager()));
app.setName(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString());
app.setPackageName(packageInfo.packageName);
app.setVersionName(packageInfo.versionName);
result.add(app);
}
}
return result;
}
}
private class APP {
private String name; //应用名
private String packageName; //包名
private String versionName; //版本名
private Drawable icon; //应用图标
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public String getVersionName() {
return versionName;
}
public void setVersionName(String versionName) {
this.versionName = versionName;
}
public Drawable getIcon() {
return icon;
}
public void setIcon(Drawable icon) {
this.icon = icon;
}
}
}
运行结果:
- 大小: 24.4 KB
分享到:
相关推荐
我们手机上安装的应用默认是以GridView的形式排放的,本篇博客将讲述以ListView的形式获得所有应用,并且点击应用后可以启动。
本篇文章是对Android获得已安装应用大小的解决方法进行了详细的分析介绍,需要的朋友参考下
获得Android系统中所有已安装的应用,通过http联网自动检测更新新版本,并下载升级更新。
android实在获得root权限应用静默安装
android 获得系统的所有应用,以GridView的形式显示应用的图标和应用名字,点击可以进入相应的应用。
在Android应用程序中,有一类特殊的消息,是专门负责与用户进行交互的,它们就是触摸屏和键盘等输入事件。触摸屏和键盘事件是统一由系统输入管理器InputManager进行分发的。也就是说,InputManager负责从硬件接收...
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 ...
Delphi XE8 iOS与Android移动应用开发(APP开发)[完整中文版],这是一本不可多得的介绍使用delphi xe8开发iOS与Android移动应用的电子书,实用的技术开发教程与技术开发手册。 Delphi XE8跨平台开发让你使用一套...
杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会...
应用开发中有需要监听到程序是否安装或者卸载成功,在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播。可以通过intent.getDataString()获得所安装的包名...
和以其为首的Android手机联盟的大力支持和推广下,Android不仅得到了全球开发者社区的关注,而且一大批世界一流 的手机厂商都已经或准备采用Android。 拥抱Android开发。拥抱移动开发的未来! 如果你在思考...
不过应用程序运行命令获取ROOT权限,设备必须已破解(获得ROOT权限),代码中主要对流进行操作,有对文件读写不清楚的都可以看看。(源码采用GBK编码)。之前也介绍过一个静默卸载的项目...
《Android移动应用开发(第3版)卷Ⅰ:基础篇》涵盖了Android开发从概念、技术到市场推广应用的全部主题,内容包括Android平台概览、Android应用程序设计精髓、Android用户界面设计精髓、Android应用程序设计精髓、...
《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...
《Android应用开发全程实录》内容上覆盖了用Android开发需要的大部分知识储备。开发者通过本书的学习轻松开发出企业级的Android应用。 《Android应用开发全程实录》以Android各个组件应用为轴,系统地介绍了...
Android系统的RTC应用设计,实现硬件驱动的读取写入操作。
Android编程下获得应用程序的签名示例程序代码。 Android编程下获得应用程序的签名示例程序代码。
android得到最近使用过的应用,相关博文:http://www.cnblogs.com/tianzhijiexian/p/3920208.html