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

xiaoxiao2021-02-27  359

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

先看看效果图:

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

[java]  view plain  copy   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;              @Override       protected 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;       }      }  

下面是适配器的代码

[java]  view plain  copy   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;       }          @Override       public int getCount() {           if (list == null) {               return 0;           }           return list.size();       }          @Override       public Object getItem(int position) {           if (list == null) {               return null;           }           return list.get(position);       }          @Override       public long getItemId(int position) {           if (list == null) {               return 0;           }           return position;       }          @Override       public 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;       }   }  

下面是一个应用的实体类

[java]  view plain  copy   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;       }      }  

下面是一个应用的工具类

[java]  view plain  copy   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系统:

转载请注明原文地址: https://www.6miu.com/read-4470.html

最新回复(0)