最近想做一個工作管理員練一練手,第一道題就是擷取手機中正在啟動並執行程式。後來在網上找了一下資料,終於有了眉目。廢話不多說!看代碼。
ActivityMain.java
public class ActivityMain extends ListActivity {<br />@Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);</p><p> List<Programe> list = getRunningProcess();<br /> ListAdapter adapter = new ListAdapter(list,this);<br /> getListView().setAdapter(adapter);<br /> }</p><p>//正在啟動並執行<br />public List<Programe> getRunningProcess(){<br />PackagesInfo pi = new PackagesInfo(this);</p><p>ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);<br />//擷取正在啟動並執行應用<br />List<RunningAppProcessInfo> run = am.getRunningAppProcesses();<br />//擷取包管理器,在這裡主要通過包名擷取程式的表徵圖和程式名<br />PackageManager pm =this.getPackageManager();<br />List<Programe> list = new ArrayList<Programe>();</p><p>for(RunningAppProcessInfo ra : run){<br />//這裡主要是過濾系統的應用和電話應用,當然你也可以把它注釋掉。<br />if(ra.processName.equals("system") || ra.processName.equals("com.android.phone")){<br />continue;<br />}</p><p>Programe pr = new Programe();<br />pr.setIcon(pi.getInfo(ra.processName).loadIcon(pm));<br />pr.setName(pi.getInfo(ra.processName).loadLabel(pm).toString());<br />System.out.println(pi.getInfo(ra.processName).loadLabel(pm).toString());<br />list.add(pr);<br />}<br />return list;<br />}</p><p>}
ListAdapter.java
public class ListAdapter extends BaseAdapter {<br />List<Programe> list = new ArrayList<Programe>();<br />LayoutInflater la;<br />Context context;</p><p>public ListAdapter(List<Programe> list ,Context context){<br />this.list = list;<br />this.context = context;<br />}</p><p>@Override<br />public int getCount() {<br />// TODO Auto-generated method stub<br />return list.size();<br />}<br />@Override<br />public Object getItem(int position) {<br />// TODO Auto-generated method stub<br />return list.get(position);<br />}<br />@Override<br />public long getItemId(int position) {<br />// TODO Auto-generated method stub<br />return position;<br />}<br />@Override<br />public View getView(int position, View convertView, ViewGroup parent) {<br />ViewHolder holder;<br />if(convertView == null)<br />{<br />la = LayoutInflater.from(context);<br />convertView=la.inflate(R.layout.list_item, null);</p><p>holder = new ViewHolder();<br />holder.imgage=(ImageView) convertView.findViewById(R.id.image);<br />holder.text = (TextView) convertView.findViewById(R.id.text);</p><p>convertView.setTag(holder);<br />}else{<br />holder = (ViewHolder) convertView.getTag();<br />}<br /> final Programe pr = (Programe)list.get(position);<br />//設定表徵圖<br />holder.imgage.setImageDrawable(pr.getIcon());<br />//設定程式名<br />holder.text.setText(pr.getName());</p><p>return convertView;<br />}<br />}<br />class ViewHolder{<br /> TextView text;<br />ImageView imgage;<br />}
PackagesInfo.java
public class PackagesInfo {<br />private List<ApplicationInfo> appList;</p><p>public PackagesInfo(Context context){<br />//通包管理器,檢索所有的應用程式(甚至卸載的)與資料目錄<br />PackageManager pm = context.getApplicationContext().getPackageManager();<br />appList = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);<br />}</p><p>/**<br /> * 通過一個程式名返回該程式的一個Application對象。<br /> * @param name程式名<br /> * @returnApplicationInfo<br /> */</p><p>public ApplicationInfo getInfo(String name){<br />if(name == null){<br />return null;<br />}<br />for(ApplicationInfo appinfo : appList){<br />if(name.equals(appinfo.processName)){<br />return appinfo;<br />}<br />}<br />return null;<br />}</p><p>}<br />
Programe.java
public class Programe {<br />//表徵圖<br />private Drawable icon;<br />//程式名<br />private String name;</p><p>public Drawable getIcon() {<br />return icon;<br />}<br />public void setIcon(Drawable icon) {<br />this.icon = icon;<br />}<br />public String getName() {<br />return name;<br />}<br />public void setName(String name) {<br />this.name = name;<br />}</p><p>}
list_item.xml
<?xml version="1.0" encoding="UTF-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="horizontal"<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> ><br /> <ImageView<br /> android:id="@+id/image"<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:layout_marginRight="10dip"<br /> /><br /> <TextView<br /> android:id="@+id/text"<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> /></p><p> </LinearLayout>
效果