[转]获取Android中正在运行应用程序的列表

时间:2022-02-14 05:01:49

本文转自:http://www.linuxidc.com/Linux/2011-09/42287.htm

 

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

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


ListAdapter.java

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

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

Programe.java

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