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
- Android 5.0系统以上获取所有运行进程
- Android 5.0系统以上获取所有运行进程
- Android:5.0以上获取系统正在运行的进程信息
- 获取windows系统所有运行进程
- 获取系统所有进程
- 获取Android系统正在运行的进程
- 如何获取android的所有运行中的进程
- 获取android正在运行的所有app进程
- android5.0以上获取系统进程信息
- 解决5.0获取系统中运行进程
- 获取系统当前所有进程
- Android开发之获取系统所有进程信息。
- 在Android中获取系统正在运行的进程方法
- Window获取所有运行的进程
- Android 6.0以上系统动态获取权限
- 获取系统中所有进程&线程信息
- Android 获取系统所有短信
- Android WebView截取所有内容生成长图在5.0以上系统异常问题
- iOS开发之UIImagePickerController图片选择管理器
- android项目基于gradle的混淆编译--理论
- iOS学习之路-简易图片浏览器
- js变量,json格式编码困惑
- 可收缩分组表格(仿QQ联系人界面)
- Android 5.0系统以上获取所有运行进程
- android 堆内存的一些小知识
- 我的MYSQL学习心得(十四) 备份和恢复
- android下raw与assets文件夹区别
- JAVA学习【3】对JAVA值传递的理解
- java集合-Map
- 一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目 http://www.devtf.cn
- weak和assign的区别,以及使用场景
- maven项目配置自动生成数据库表对应 mapper 文件