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

程序运行效果图:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

程序代码:

/**

* 获取所有软件信息

* 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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值