获取android中正在运行应用程序的列表

 

获取android中正在运行应用程序的列表

最近想做一个任务管理器练一练手,第一道题就是获取手机中正在运行的程序。后来在网上找了一下资料,终于有了眉目。废话不多说!看代码。

ActivityMain.java

  1. public class ActivityMain extends ListActivity {
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
  6. List<Programe> list = getRunningProcess();
  7. ListAdapter adapter = new ListAdapter(list,this);
  8. getListView().setAdapter(adapter);
  9. }
  10. //正在运行的
  11. public List<Programe> getRunningProcess(){
  12. PackagesInfo pi = new PackagesInfo(this);
  13. ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
  14. //获取正在运行的应用
  15. List<RunningAppProcessInfo> run = am.getRunningAppProcesses();
  16. //获取包管理器,在这里主要通过包名获取程序的图标和程序名
  17. PackageManager pm =this.getPackageManager();
  18. List<Programe> list = new ArrayList<Programe>();
  19. for(RunningAppProcessInfo ra : run){
  20. //这里主要是过滤系统的应用和电话应用,当然你也可以把它注释掉。
  21. if(ra.processName.equals("system") || ra.processName.equals("com.android.phone")){
  22. continue;
  23. }
  24. Programe pr = new Programe();
  25. pr.setIcon(pi.getInfo(ra.processName).loadIcon(pm));
  26. pr.setName(pi.getInfo(ra.processName).loadLabel(pm).toString());
  27. System.out.println(pi.getInfo(ra.processName).loadLabel(pm).toString());
  28. list.add(pr);
  29. }
  30. return list;
  31. }
  32. }

ListAdapter.java

  1. public class ListAdapter extends BaseAdapter {
  2. List<Programe> list = new ArrayList<Programe>();
  3. LayoutInflater la;
  4. Context context;
  5. public ListAdapter(List<Programe> list ,Context context){
  6. this.list = list;
  7. this.context = context;
  8. }
  9. @Override
  10. public int getCount() {
  11. // TODO Auto-generated method stub
  12. return list.size();
  13. }
  14. @Override
  15. public Object getItem(int position) {
  16. // TODO Auto-generated method stub
  17. return list.get(position);
  18. }
  19. @Override
  20. public long getItemId(int position) {
  21. // TODO Auto-generated method stub
  22. return position;
  23. }
  24. @Override
  25. public View getView(int position, View convertView, ViewGroup parent) {
  26. ViewHolder holder;
  27. if(convertView == null)
  28. {
  29. la = LayoutInflater.from(context);
  30. convertView=la.inflate(R.layout.list_item, null);
  31. holder = new ViewHolder();
  32. holder.imgage=(ImageView) convertView.findViewById(R.id.image);
  33. holder.text = (TextView) convertView.findViewById(R.id.text);
  34. convertView.setTag(holder);
  35. }else{
  36. holder = (ViewHolder) convertView.getTag();
  37. }
  38. final Programe pr = (Programe)list.get(position);
  39. //设置图标
  40. holder.imgage.setImageDrawable(pr.getIcon());
  41. //设置程序名
  42. holder.text.setText(pr.getName());
  43. return convertView;
  44. }
  45. }
  46. class ViewHolder{
  47. TextView text;
  48. ImageView imgage;
  49. }

PackagesInfo.java

  1. public class PackagesInfo {
  2. private List<ApplicationInfo> appList;
  3. public PackagesInfo(Context context){
  4. //通包管理器,检索所有的应用程序(甚至卸载的)与数据目录
  5. PackageManager pm = context.getApplicationContext().getPackageManager();
  6. appList = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
  7. }
  8. /**
  9. * 通过一个程序名返回该程序的一个Application对象。
  10. * @param name 程序名
  11. * @return ApplicationInfo
  12. */
  13. public ApplicationInfo getInfo(String name){
  14. if(name == null){
  15. return null;
  16. }
  17. for(ApplicationInfo appinfo : appList){
  18. if(name.equals(appinfo.processName)){
  19. return appinfo;
  20. }
  21. }
  22. return null;
  23. }
  24. }

Programe.java

  1. public class Programe {
  2. //图标
  3. private Drawable icon;
  4. //程序名
  5. private String name;
  6. public Drawable getIcon() {
  7. return icon;
  8. }
  9. public void setIcon(Drawable icon) {
  10. this.icon = icon;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. }

list_item.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal"
  4. android:layout_width="wrap_content"
  5. android:layout_height="wrap_content"
  6. >
  7. <ImageView
  8. android:id="@+id/image"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_marginRight="10dip"
  12. />
  13. <TextView
  14. android:id="@+id/text"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. />
  18. </LinearLayout>

效果如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值