android 获取程序,Android开发之获取所有软件信息
程序运行效果图:
程序代码:
/**
* 获取所有软件信息
* 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开发之获取所有软件信息相关推荐
- Android应用程序的开发
前 言 Android是Google于2007年11月推出的一款开放的嵌入式操作系统平台,由于其完全开源的特性,Android正以空前的速度吸引着大批开发者的加入.为了帮助众多的软件开发人员尽快地掌握 ...
- Linux加法简单程序,Android应用程序的开发目录——简单的加法计算示例
突然说写Android 的笔记让我很迷茫,不知从哪里开始写,就按老师上课的过程进行吧! Android的程序目录 代码建立在src中这个不用解释了,在gen所在的文件夹里有个叫R.java的类,这个类 ...
- 微信小程序--云开发之获取多条数据(大于限制20条)
前言 微信小程序云开发中的获取数据API一次最多获取20条记录,那么怎么获取全部记录呢? 方法一 利用上拉刷新,每上拉一次(触碰底部时触发function)便获取20条记录,然后与原来记录合并. js ...
- 微信小程序云开发之获取云数据库信息进行条数限制
要获取信息,进行条数限制.其实是云数据库获取信息很常用的一个方法.limit(). 比如要获取某个集合中数据,一次获取十条信息,我们可以这样写: db.collection('dynamic').li ...
- 用自己的手机调试Android应用程序——Android Studio
最近在学习Android应用开发,一般来说都是用AVD建立的虚拟手机来调试和运行Android应用程序.不过自己的手机也是Android的,所以就是尝试用自己的手机来调试程序.不过在调试之前先做好手机 ...
- android连接程序,android程序如何连接真机进行测试
android 如何连真机测试 个人认为第三种方法更易理解 1. 设置android手机为USB调试模式.步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择 ...
- android hook 程序,Android hook框架之Xposed插件开发
上一篇讲了Android hook框架Cydia,这一篇是Android hook的另一个框架Xposed,Xposed是一款广泛应用于安卓领域的开源框架. 其原理是Xposed框架主要通过替换/sy ...
- android 获取程序,Android获取桌面应用程序
转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/50057029 首先在看这个博客之前, 你可以先看下这个博客,http:// ...
- android+头像+程序,Android获取联系人头像的方法
本文实例讲述了Android获取联系人头像的方法.分享给大家供大家参考,具体如下: public byte[] getPhoto(String people_id) { String photo_id ...
最新文章
- TCP/IP协议面试常见题目
- map/set/object/array对比
- php 定时脚本执行wget无效_写了个Bug,误执行rm fr /*,瞬间背后一凉!
- 什么叫云服务器_什么叫云计算,云计算是什么,最通俗的解释是这样的
- linux 内存管理优化,Linux性能优化实战 内存篇 阅读笔记
- opencv计算图像亮度调节_OpenCV教程创建Trackbar图像对比度、亮度值调整
- c# mysql 时间_c# – 无法在VS2010中将MySQL日期/时间值转换为System.DateTime
- 自动生成的sitemap.html乱码,任意网站添加生成sitemap地图
- JS设计模式——单例模式
- Quartus II13.1 simulate13.1 详细安装教学
- 过采样方法、欠采样介绍
- 表格中使用blockquote出现外边框的解决办法
- mysql怎么初始化自增值_MySql中重新设置AUTO_INCREMENT自增值方法
- 优卡仕广告一体机——商用显示设备专家
- ISFP——思想起决定作用
- 视频在线发布网站HTML模板分享
- 数字信号处理的MATLAB实现——快速傅里叶变换
- python详细介绍
- POI excel 单元个的内容 自适应行高
- 《数字图像处理》- 图像的输入,输出和显示
热门文章
- matplotlib 自定义数据绘制三维图
- 旅游网后台管理系统(一)环境搭建
- Lua的函数参数为table时奇特现象
- day19Java-其它IO-ObjectIn(Out)putStream-(反)序列化流
- shell脚本系列:1、shell、bash和shell脚本
- 有一天,,,我当了老爸!
- 可以当作“毒鸡汤”来喝的经验帖--毕业论文之“论文初稿无从下手”、“这令人头大的查重”经验之谈
- 品牌增删改查案例,登录以及注册
- 使用JTA解决多数据源事务问题
- i3d finetune(微调)