1)创建RunningAppInfo类,代码如下

package com.example.runningapps;import android.graphics.drawable.Drawable;public class RunningAppInfo {/*程序名称*/private String appLabel;public void SetAppLabel(String _appLabel){this.appLabel=_appLabel;}public String GetAppLabel(){return this.appLabel;}/*程序图标*/private Drawable appIcon;public void SetAppIcon(Drawable _appIcon){this.appIcon=_appIcon;}public Drawable GetAppIcon(){return appIcon;}/*包名称*/private String pkgName;public void SetPkgName(String _pkgName){this.pkgName=_pkgName;}public String GetPkgName(){return this.pkgName;}/*进程id*/private int pid;public void SetPid(int _pid){this.pid=_pid;}public int GetPid(){return this.pid;}/*进程名称*/private String processName;public void SetProcessName(String _processName){this.processName=_processName;}public String GetProcessName(){return processName;}}


2)创建applist.xml作为自定义ListView的样式代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <ImageView        android:id="@+id/appIcon"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/ic_launcher" />    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:orientation="vertical" >        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content">            <TextView                android:id="@+id/appLabel"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginLeft="20dp"                android:layout_marginTop="5dp"                android:text="TextView" />            <TextView                android:id="@+id/pkgName"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginLeft="20dp"                android:layout_marginTop="5dp"                android:text="TextView" />        </LinearLayout>        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content" >            <TextView                android:id="@+id/pid"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginLeft="20dp"                android:layout_marginTop="5dp"                android:text="TextView" />            <TextView                android:id="@+id/processName"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginLeft="20dp"                android:layout_marginTop="5dp"                android:text="TextView" />        </LinearLayout>    </LinearLayout></LinearLayout>


3)创建MyListAdapter.java作为自定ListAdapeter代码如下

package com.example.runningapps;import java.util.ArrayList;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;class MyListAdapter extends BaseAdapter {private ArrayList<RunningAppInfo> apps=null;private Context context=null;public MyListAdapter(ArrayList<RunningAppInfo> _apps,Context _context){this.apps=_apps;this.context=_context;}      public int getCount() {          //设置绘制数量          return apps.size();      }        @Override      public boolean areAllItemsEnabled() {         return false;      }        public Object getItem(int position) {          return position;      }        public long getItemId(int position) {          return position;      }        public View getView(int position, View convertView, ViewGroup parent) {          ImageView appIconImageView=null;        TextView appLabelTextView=null;        TextView pkgNameTextView=null;        TextView pidTextView=null;        TextView processNameTextView=null;        if (convertView == null || position < apps.size()) {          convertView = LayoutInflater.from(context).inflate(              R.layout.applist, null);          appIconImageView = (ImageView) convertView.findViewById(R.id.appIcon);          appLabelTextView = (TextView) convertView.findViewById(R.id.appLabel);          pkgNameTextView = (TextView) convertView.findViewById(R.id.pkgName);          pidTextView = (TextView) convertView.findViewById(R.id.pid);          processNameTextView = (TextView) convertView.findViewById(R.id.processName);         }        /*图标*/        appIconImageView.setImageDrawable(apps.get(position).GetAppIcon());        /*应用程序名称*/        appLabelTextView.setText(apps.get(position).GetAppLabel());        /*包名称*/        pkgNameTextView.setText(apps.get(position).GetPkgName());        /*进程id*/        pidTextView.setText(Integer.toString(apps.get(position).GetPid()));        /*进程名称*/        processNameTextView.setText(apps.get(position).GetProcessName());        return convertView;      }  }  


4)修改MainActivity.java代码将自定ListAdapeter绑定给ListView代码如下

package com.example.runningapps;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundle;import android.app.Activity;import android.app.ActivityManager;import android.app.ActivityManager.RunningAppProcessInfo;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.view.Menu;import android.widget.ListView;public class MainActivity extends Activity {private PackageManager pm=null;private ListView listview1=null;private MyListAdapter adapter=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listview1=(ListView)findViewById(R.id.listView1);ArrayList<RunningAppInfo> runningApps=queryAllRunningAppInfo();adapter=new MyListAdapter(runningApps, MainActivity.this);listview1.setAdapter(adapter);}/* 查找正在运行的应用程序 * 1)获取系统安装的所有应用程序 * 2)根据报名pkgname过滤获取真正运行的应用程序 * */private ArrayList<RunningAppInfo> queryAllRunningAppInfo(){pm=this.getPackageManager();ArrayList<RunningAppInfo> runningApps=new ArrayList<RunningAppInfo>();//获取所有已经安装的应用程序List<ApplicationInfo> installedApps=pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);//排序Collections.sort(installedApps,new ApplicationInfo.DisplayNameComparator(pm));//保存所有正在运行的包名以及它所在的进程信息Map<String, RunningAppProcessInfo> pgkProcessAppMap=new HashMap<String, ActivityManager.RunningAppProcessInfo>();//通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程ActivityManager mActivityManager=(ActivityManager)getSystemService(ACTIVITY_SERVICE);List<RunningAppProcessInfo> runningAppProcesses=mActivityManager.getRunningAppProcesses();for (RunningAppProcessInfo runningAppProcess : runningAppProcesses) {//获得正在运行在该进程里的所有应用程序包String[] pkgNameList=runningAppProcess.pkgList;for (String pkgName : pkgNameList) {//将所有的应用程序包添加到map对象里pgkProcessAppMap.put(pkgName, runningAppProcess);}}//遍历安装了应用程序for (ApplicationInfo installedApp : installedApps) {if(pgkProcessAppMap.containsKey(installedApp.packageName)){//安装程序正在运行if((installedApp.flags&installedApp.FLAG_SYSTEM)==0){//非系统应用程序RunningAppInfo item=new RunningAppInfo();item.SetPid(pgkProcessAppMap.get(installedApp.packageName).pid);item.SetProcessName(pgkProcessAppMap.get(installedApp.packageName).processName);item.SetAppLabel((String)installedApp.loadLabel(pm));item.SetAppIcon(installedApp.loadIcon(pm));item.SetPkgName(installedApp.packageName);runningApps.add(item);}}}return runningApps;}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}


更多相关文章

  1. 构建更好的应用--Xamarin平台
  2. Android启动过程的Zygote进程
  3. 【Android】【应用信息】获取应用列表
  4. android 8.0 wifi-host ap 开关操作
  5. Android创建快捷方式(shortcut)
  6. Android5.0以太网流程源码情景分析
  7. 解析ANDROID ps命令执行后各项参数的含义
  8. android彻底结束进程的两种方法
  9. Android(安卓)将自己的应用程序改成系统的应用程序

随机推荐

  1. Sql Server 查询性能优化之走出索引的误
  2. Sql Server查询性能优化之不可小觑的书签
  3. sqlserver 脚本和批处理指令小结
  4. SQL Server中通过扩展存储过程实现数据库
  5. sql server中批量插入与更新两种解决方案
  6. sql server中通过查询分析器实现数据库的
  7. sqlserver中查询横表变竖表的sql语句简析
  8. 使用FORFILES命令来删除SQLServer备份的
  9. SQL触发器实例讲解
  10. sqlserver 多表查询不同数据库服务器上的