程序运行效果图:

程序代码:

/**

* 获取所有软件信息

* 1.通过异步的方式显示系统中所有软件

* 2.单击打开指定软件

* 3.将所有软件的包名和activity名保存的本地SharedPreferences

* @author jph

* Date:2014.09.21

*/

public class ScanPackage1 extends Activity {

/**扫描成功**/

private final static int FLAG_LOAD_SUCCESS=0x10001;

private final static int SCANNING=0x10002;

private ListView list;

private List>items=new ArrayList>();

private SimpleAdapter adapter;

// 取得所有安装软件信息

private List allPackageInfos;

// 取得自己安装的软件信息

private List userPackageInfos;

// 取得系统安装的软件信息

private List sysPackageInfos;

Handler mHandler=new Handler(){

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

switch (msg.what) {

case FLAG_LOAD_SUCCESS://完成扫描

break;

case SCANNING://正在扫描

items.add((Map) msg.obj);

//通知适配器数据改变

adapter.notifyDataSetChanged();

break;

default:

break;

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.sp_layout);

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

new ScanThread().start();

adapter=new SimpleAdapter(this, items, R.layout.line, new String[]{

"imgIco","appName","packageName"

}, new int[]{R.id.imgIco,R.id.tvAppName,R.id.tvAppDesc});

list.setAdapter(adapter);

//ViewBinder该类可以帮助SimpleAdapter加载图片(如:Bitmap,Drawable)

adapter.setViewBinder(new ViewBinder() {

@Override

public boolean setViewValue(View view, Object data,

String textRepresentation) {

// TODO Auto-generated method stub

if(view instanceof ImageView && data instanceof Drawable){

ImageView iv = (ImageView) view;

iv.setImageDrawable((Drawable) data);

return true;

}else{

return false;

}

}

});

list.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> arg0, View arg1, int arg2,

long arg3) {

// TODO Auto-generated method stub

try {

PackageInfo pInfo=allPackageInfos.get(arg2);

Intent intent=new Intent();

intent.setComponent(new ComponentName(pInfo.packageName, pInfo.activities[0].name));

startActivity(intent);

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

});

}

// ***************--------*创建一个线程加载安装程序*--------------*******************//

private class ScanThread extends Thread {

@Override

public void run() {

// 取得系统安装所有软件信息

allPackageInfos = getPackageManager().getInstalledPackages(

PackageManager.GET_UNINSTALLED_PACKAGES

| PackageManager.GET_ACTIVITIES);

// 定义用户安装软件信息包

userPackageInfos = new ArrayList();

// 定义系统安装软件信息包

sysPackageInfos = new ArrayList();

// 循环取出所有软件信息

for (int i = 0; i < allPackageInfos.size(); i++) {

// 得到每个软件信息

PackageInfo temp = allPackageInfos.get(i);

ApplicationInfo appInfo = temp.applicationInfo;

if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0

|| (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {

//系统软件

sysPackageInfos.add(temp);

} else {

//用户自己安装软件

userPackageInfos.add(temp);

}

//获取程序的图标

Drawable ico=ScanPackage1.this.getPackageManager().getApplicationIcon(appInfo);

//获取程序的名称

String appName=(String) ScanPackage1.this.getPackageManager().getApplicationLabel(appInfo);

Mapitem=new HashMap();

//获取程序的包名

String packageName=appInfo.packageName;

item.put("imgIco", ico);

item.put("appName", appName);

item.put("packageName", packageName);

Message message = new Message();

message.what =SCANNING;

message.obj = item;

mHandler.sendMessage(message);

}

saveInfo(sysPackageInfos, userPackageInfos);

mHandler.sendEmptyMessage(FLAG_LOAD_SUCCESS);

}

};

/**

* 将系统中所装程序的信息写入到配置文件

* @param sysPackageInfos 系统安装软件信息包

* @param userPackageInfos 用户安装软件信息包

*/

private void saveInfo(List sysPackageInfos,List userPackageInfos) {

//将用户安装的软件添加到添加到系统软件的集合中

sysPackageInfos.addAll(userPackageInfos);

SharedPreferences sp = this.getSharedPreferences("appInfs",

MODE_PRIVATE);

Editor editor = sp.edit();

for (int i = 0; i < sysPackageInfos.size(); i++) {

try {

//获取程序的包名

String packageName = sysPackageInfos.get(i).packageName;

// 取出activity信息

ActivityInfo activityInfo = sysPackageInfos.get(i).activities[0];

// 取出activity名字

String activityName=activityInfo.name;

//将程序的信息写入到配置文件

editor.putString(packageName, activityName);

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

editor.commit();

}

}

android 获取程序,Android开发之获取所有软件信息相关推荐

  1. Android应用程序的开发

    前 言 Android是Google于2007年11月推出的一款开放的嵌入式操作系统平台,由于其完全开源的特性,Android正以空前的速度吸引着大批开发者的加入.为了帮助众多的软件开发人员尽快地掌握 ...

  2. Linux加法简单程序,Android应用程序的开发目录——简单的加法计算示例

    突然说写Android 的笔记让我很迷茫,不知从哪里开始写,就按老师上课的过程进行吧! Android的程序目录 代码建立在src中这个不用解释了,在gen所在的文件夹里有个叫R.java的类,这个类 ...

  3. 微信小程序--云开发之获取多条数据(大于限制20条)

    前言 微信小程序云开发中的获取数据API一次最多获取20条记录,那么怎么获取全部记录呢? 方法一 利用上拉刷新,每上拉一次(触碰底部时触发function)便获取20条记录,然后与原来记录合并. js ...

  4. 微信小程序云开发之获取云数据库信息进行条数限制

    要获取信息,进行条数限制.其实是云数据库获取信息很常用的一个方法.limit(). 比如要获取某个集合中数据,一次获取十条信息,我们可以这样写: db.collection('dynamic').li ...

  5. 用自己的手机调试Android应用程序——Android Studio

    最近在学习Android应用开发,一般来说都是用AVD建立的虚拟手机来调试和运行Android应用程序.不过自己的手机也是Android的,所以就是尝试用自己的手机来调试程序.不过在调试之前先做好手机 ...

  6. android连接程序,android程序如何连接真机进行测试

    android 如何连真机测试 个人认为第三种方法更易理解 1. 设置android手机为USB调试模式.步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择 ...

  7. android hook 程序,Android hook框架之Xposed插件开发

    上一篇讲了Android hook框架Cydia,这一篇是Android hook的另一个框架Xposed,Xposed是一款广泛应用于安卓领域的开源框架. 其原理是Xposed框架主要通过替换/sy ...

  8. android 获取程序,Android获取桌面应用程序

    转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/50057029 首先在看这个博客之前, 你可以先看下这个博客,http:// ...

  9. android+头像+程序,Android获取联系人头像的方法

    本文实例讲述了Android获取联系人头像的方法.分享给大家供大家参考,具体如下: public byte[] getPhoto(String people_id) { String photo_id ...

最新文章

  1. TCP/IP协议面试常见题目
  2. map/set/object/array对比
  3. php 定时脚本执行wget无效_写了个Bug,误执行rm fr /*,瞬间背后一凉!
  4. 什么叫云服务器_什么叫云计算,云计算是什么,最通俗的解释是这样的
  5. linux 内存管理优化,Linux性能优化实战 内存篇 阅读笔记
  6. opencv计算图像亮度调节_OpenCV教程创建Trackbar图像对比度、亮度值调整
  7. c# mysql 时间_c# – 无法在VS2010中将MySQL日期/时间值转换为System.DateTime
  8. 自动生成的sitemap.html乱码,任意网站添加生成sitemap地图
  9. JS设计模式——单例模式
  10. Quartus II13.1 simulate13.1 详细安装教学
  11. 过采样方法、欠采样介绍
  12. 表格中使用blockquote出现外边框的解决办法
  13. mysql怎么初始化自增值_MySql中重新设置AUTO_INCREMENT自增值方法
  14. 优卡仕广告一体机——商用显示设备专家
  15. ISFP——思想起决定作用
  16. 视频在线发布网站HTML模板分享
  17. 数字信号处理的MATLAB实现——快速傅里叶变换
  18. python详细介绍
  19. POI excel 单元个的内容 自适应行高
  20. 《数字图像处理》- 图像的输入,输出和显示

热门文章

  1. matplotlib 自定义数据绘制三维图
  2. 旅游网后台管理系统(一)环境搭建
  3. Lua的函数参数为table时奇特现象
  4. day19Java-其它IO-ObjectIn(Out)putStream-(反)序列化流
  5. shell脚本系列:1、shell、bash和shell脚本
  6. 有一天,,,我当了老爸!
  7. 可以当作“毒鸡汤”来喝的经验帖--毕业论文之“论文初稿无从下手”、“这令人头大的查重”经验之谈
  8. 品牌增删改查案例,登录以及注册
  9. 使用JTA解决多数据源事务问题
  10. i3d finetune(微调)