Android 5.0系统以上获取所有运行进程

来源:互联网 发布:完美刀塔助手没有网络 编辑:程序博客网 时间:2024/06/03 21:39

在Android 5.0系统以上,调用getRunningAppProcesses() 方法来获取所有运行的进程是获取不到的,因为谷歌出于安全的考虑,所以在5.0系统以上把这个方法移除了。那么我们又该如何去获取呢?不要急,大家先看看下面一个demo的源码。不过值得注意的是,下面这种方式只适合用于5.0系统以上,以下同样也是获取不到的。以下的直接调用getRunningAppProcesses() 方法即可。


先看看效果图:



下面是MainActivity类的代码,注意里面方法里的这句 List<AndroidAppProcess> listInfo = ProcessManager.getRunningAppProcesses() ,通过它来获取。需要导入一个jar包,该包在文章末尾可以下载得到。

package com.qiulong.appprocesstest.activity;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.ActivityManager;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.os.Bundle;import android.os.Debug;import android.widget.ListView;import android.widget.TextView;import com.jaredrummler.android.processes.ProcessManager;import com.jaredrummler.android.processes.models.AndroidAppProcess;import com.qiulong.appprocesslibrary.R;import com.qiulong.appprocesstest.AppUtils;import com.qiulong.appprocesstest.adapter.AppAdapter;import com.qiulong.appprocesstest.entity.AppEntity;public class MainActivity extends Activity {private TextView versionText;private ListView listView;private AppAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);versionText = (TextView) findViewById(R.id.main_text);versionText.setText("当前系统版本:" + android.os.Build.VERSION.RELEASE);listView = (ListView)findViewById(R.id.main_listview);adapter = new AppAdapter(this, getAndroidProcess(this));listView.setAdapter(adapter);}/** * 5.0系统以上获取运行的进程方法 * @param context * @param version * @return */private List<AppEntity> getAndroidProcess(Context context) {List<AppEntity> resule = new ArrayList<AppEntity>();ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);PackageManager pm = context.getPackageManager();AppUtils proutils = new AppUtils(context);List<AndroidAppProcess> listInfo = ProcessManager.getRunningAppProcesses();if(listInfo.isEmpty() || listInfo.size() == 0){return null;}for (AndroidAppProcess info : listInfo) {ApplicationInfo app = proutils.getApplicationInfo(info.name);// 过滤自己当前的应用if (app == null || context.getPackageName().equals(app.packageName)) {continue;}// 过滤系统的应用if ((app.flags & app.FLAG_SYSTEM) > 0) {continue;}AppEntity ent = new AppEntity();ent.setAppIcon(app.loadIcon(pm));//应用的图标ent.setAppName(app.loadLabel(pm).toString());//应用的名称ent.setPackageName(app.packageName);//应用的包名// 计算应用所占内存大小int[] myMempid = new int[] { info.pid };Debug.MemoryInfo[] memoryInfo = am.getProcessMemoryInfo(myMempid);double memSize = memoryInfo[0].dalvikPrivateDirty / 1024.0;int temp = (int) (memSize * 100);memSize = temp / 100.0;ent.setMemorySize(memSize);//应用所占内存的大小resule.add(ent);}return resule;}}


下面是适配器的代码

package com.qiulong.appprocesstest.adapter;import java.util.List;import com.qiulong.appprocesslibrary.R;import com.qiulong.appprocesstest.entity.AppEntity;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;public class AppAdapter extends BaseAdapter {private Context context;private List<AppEntity> list;private LayoutInflater inflater;public AppAdapter(Context context, List<AppEntity> list) {this.context = context;this.inflater = LayoutInflater.from(context);this.list = list;}@Overridepublic int getCount() {if (list == null) {return 0;}return list.size();}@Overridepublic Object getItem(int position) {if (list == null) {return null;}return list.get(position);}@Overridepublic long getItemId(int position) {if (list == null) {return 0;}return position;}@Overridepublic View getView(int position, View view, ViewGroup parent) {ViewHolder holder;if (view == null) {holder = new ViewHolder();view = inflater.inflate(R.layout.activity_listview_item, null);holder.icon = (ImageView) view.findViewById(R.id.item_icon);holder.name = (TextView) view.findViewById(R.id.item_name);holder.size = (TextView) view.findViewById(R.id.item_size);view.setTag(holder);} else {holder = (ViewHolder) view.getTag();}final AppEntity ent = list.get(position);holder.icon.setImageDrawable(ent.getAppIcon());holder.name.setText(ent.getAppName());holder.size.setText(ent.getMemorySize() + "MB");return view;}static class ViewHolder {private ImageView icon;private TextView name;private TextView size;}}


下面是一个应用的实体类

package com.qiulong.appprocesstest.entity;import android.graphics.drawable.Drawable;public class AppEntity {private Drawable appIcon;private String appName;private String packageName;private double memorySize;public Drawable getAppIcon() {return appIcon;}public void setAppIcon(Drawable appIcon) {this.appIcon = appIcon;}public String getAppName() {return appName;}public void setAppName(String appName) {this.appName = appName;}public String getPackageName() {return packageName;}public void setPackageName(String packageName) {this.packageName = packageName;}public double getMemorySize() {return memorySize;}public void setMemorySize(double memorySize) {this.memorySize = memorySize;}}


下面是一个应用的工具类

package com.qiulong.appprocesstest;import java.util.List;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;/** * 应用程序工具类 *  * @author qiulong *  */public class AppUtils {private List<ApplicationInfo> appList;public AppUtils(Context context) {// 通过包管理器,检索所有的应用程序PackageManager pm = context.getPackageManager();appList = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);}/** * 通过包名返回一个应用的Application对象 *  * @param name * @return ApplicationInfo */public ApplicationInfo getApplicationInfo(String pkgName) {if (pkgName == null) {return null;}for (ApplicationInfo appinfo : appList) {if (pkgName.equals(appinfo.processName)) {return appinfo;}}return null;}}

好了,有需要的朋友可以点击下面的链接,下载完整的demo以及需要的jar包。

此处下载完整demo以及jar包:http://download.csdn.net/detail/baidu_23478311/9394372


下面我补充一下6.0系统和华为P8的运行截图,是可以获取到的哦!

华为P8:


6.0系统:



1 1
原创粉丝点击