Android6.0获取进程和进程数目的方法

Android5.0之后使用

ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//获取进程的集合
runningAppProcesses= activityManager.getRunningAppProcesses();
size = runningAppProcesses.size();
这种方法获取进程数,已经不可能了android开发越来越艰难,前天写进程管理的代码。在这里加以总结

1.若用户未开启权限,需要先开启权限:
[java]  view plain  copy
  1. protected void oncreat(){  
  2. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
  3.             if (!hasPermission()) {  
  4.                 startActivityForResult(  
  5.                         new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS),  
  6.                         MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS);  
  7.             }  
  8. }  
  9.  @Override  
  10.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  11.         if (requestCode == MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS) {  
  12.             if (!hasPermission()) {  
  13.                 ##若用户未开启权限,则引导用户开启“Apps with usage access”权限  
  14.                 startActivityForResult(  
  15.                         new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS),  
  16.                         MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS);  
  17.             }  
  18.         }  
  19.     }  
  20. ##//检测用户是否对本app开启了“Apps with usage access”权限  
  21.   private boolean hasPermission() {  
  22.         AppOpsManager appOps = (AppOpsManager)  
  23.                 getSystemService(Context.APP_OPS_SERVICE);  
  24.         int mode = 0;  
  25.         if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {  
  26.             mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,  
  27.                     android.os.Process.myUid(), getPackageName());  
  28.         }  
  29.         return mode == AppOpsManager.MODE_ALLOWED;  
  30.     }      
2.提供的方法的集合


[java]  view plain  copy
  1. public static int size;  
  2.   
  3.    /** 
  4.     * 获取进程数的方法 
  5.     * @param context 
  6.     * @return 
  7.     */  
  8.    public static int getProcessCount(Context context){  
  9.        List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = null;  
  10.        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){  
  11.            size = getTopApp(context);  
  12.        }else {  
  13.            ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  14.            //获取进程的集合  
  15.            runningAppProcesses= activityManager.getRunningAppProcesses();  
  16.            size = runningAppProcesses.size();  
  17.   
  18.        }  
  19.        return size;  
  20.   
  21.    }  
  22.   
  23.    /** 
  24.     * 6.0获取进程数 
  25.     * @param context 
  26.     * @return 
  27.     */  
  28.    private static int getTopApp(Context context) {  
  29.        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
  30.            UsageStatsManager m = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);  
  31.            if (m != null) {  
  32.                long now = System.currentTimeMillis();  
  33.                //获取60秒之内的应用数据  
  34.                List<UsageStats> stats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000, now);  
  35.                Log.i(TAG, "Running app number in last 60 seconds : " + stats.size());  
  36.                String topActivity = "";  
  37.                //取得最近运行的一个app,即当前运行的app  
  38.                if ((stats != null) && (!stats.isEmpty())) {  
  39.                    int j = 0;  
  40.                    for (int i = 0; i < stats.size(); i++) {  
  41.                        if (stats.get(i).getLastTimeUsed() > stats.get(j).getLastTimeUsed()) {  
  42.                            j = i;  
  43.                        }  
  44.                        topActivity = stats.get(j).getPackageName();  
  45.                        Log.i(TAG, "top running app is : "+topActivity);  
  46.                    }  
  47.   
  48.                }  
  49.                return stats.size();  
  50.            }  
  51.        }  
  52.        return 0;  
  53.    }  
  54.   
  55.    /** 
  56.     *获取栈顶的包名 
  57.     */  
  58.   
  59.    public static String getTopActivityApp(Context context) {  
  60.        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
  61.            UsageStatsManager m = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);  
  62.            if (m != null) {  
  63.                long now = System.currentTimeMillis();  
  64.                //获取60秒之内的应用数据  
  65.                List<UsageStats> stats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000, now);  
  66.                Log.i(TAG, "Running app number in last 60 seconds : " + stats.size());  
  67.   
  68.                String topActivity = "";  
  69.   
  70.                //取得最近运行的一个app,即当前运行的app  
  71.                if ((stats != null) && (!stats.isEmpty())) {  
  72.                    int j = 0;  
  73.                    for (int i = 0; i < stats.size(); i++) {  
  74.                        if (stats.get(i).getLastTimeUsed() > stats.get(j).getLastTimeUsed()) {  
  75.                            j = i;  
  76.                        }  
  77.                    }  
  78.                    topActivity = stats.get(j).getPackageName();  
  79.                    return topActivity;  
  80.                }  
  81.                Log.i(TAG, "top running app is : "+topActivity);  
  82.            }  
  83.        }  
  84.        return null;  
  85.    }  
  86.    /** 
  87.     * 获取可用内存的数据大小 ,单位为byte 
  88.     * @param context 
  89.     * @return 
  90.     */  
  91.    public static long getAvailSpace(Context context){  
  92.        //获取activityManager  
  93.        ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  94.        //构建可用内存对象  
  95.        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();  
  96.   
  97.   
  98.   
  99.        activityManager.getMemoryInfo(memoryInfo);  
  100.   
  101.        long availMem = memoryInfo.availMem;  
  102.        return availMem;  
  103.    }  
  104.   
  105.    public static long getTotalSpace(Context context){  
  106.        //获取activityManager  
  107.        ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  108.        //构建可用内存对象  
  109.        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();  
  110.   
  111.        activityManager.getMemoryInfo(memoryInfo);  
  112.   
  113.        return memoryInfo.totalMem;  
  114.    }  
  115.   
  116.    /** 
  117.     * 获取全部的内存空间 
  118.     * @return 
  119.     */  
  120.    public static long getTotalSpace(){  
  121.        FileReader fileReader=null;  
  122.        BufferedReader bufferedReader=null;  
  123.        try {  
  124.            fileReader=new FileReader("proc/meminfo");  
  125.   
  126.            bufferedReader=new BufferedReader(fileReader);  
  127.   
  128.            String lineOne = bufferedReader.readLine();  
  129.   
  130.            char[] chars = lineOne.toCharArray();  
  131.            StringBuffer stringBuffer = new StringBuffer();  
  132.            for (char aChar : chars) {  
  133.                if (aChar>='0'&&aChar<='9'){  
  134.                    stringBuffer.append(aChar);  
  135.                }  
  136.            }  
  137.            return Long.parseLong(stringBuffer.toString())*1024;  
  138.        } catch (Exception e) {  
  139.            e.printStackTrace();  
  140.   
  141.        }finally {  
  142.            if (fileReader!=null&&bufferedReader!=null){  
  143.                try {  
  144.                    bufferedReader.close();  
  145.                    fileReader.close();  
  146.                } catch (IOException e) {  
  147.                    e.printStackTrace();  
  148.                }  
  149.            }  
  150.        }  
  151.        return 0;  
  152.    }  
  153.   
  154.    /** 
  155.     * 获取进程的信息 
  156.     * @param context 
  157.     * @return 
  158.     */  
  159.    public  static List<ProcessInfoBean> getProcessInfo(Context context){  
  160.   
  161.        ArrayList<ProcessInfoBean> processInfoList = new ArrayList<>();  
  162.        ActivityManager systemService = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  163.   
  164.        List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = systemService.getRunningAppProcesses();  
  165.   
  166.        PackageManager PM = context.getPackageManager();  
  167.   
  168.        for (ActivityManager.RunningAppProcessInfo runningAppProcess : runningAppProcesses) {  
  169.   
  170.            ProcessInfoBean processInfo=new ProcessInfoBean();  
  171.   
  172.            processInfo.packageName= runningAppProcess.processName;  
  173.   
  174.            //获取系统占用的内存大小  
  175.            int pid = runningAppProcess.pid;  
  176.            Debug.MemoryInfo[] processMemoryInfo = systemService.getProcessMemoryInfo(new int[]{pid});  
  177.   
  178.            //获取已使用的大小:  
  179.            processInfo.memeSize= processMemoryInfo[0].getTotalPrivateDirty()*1024;  
  180.   
  181.            //获取应用的名称  
  182.            try {  
  183.                ApplicationInfo applicationInfo = PM.getApplicationInfo(processInfo.getPackageName(), 0);  
  184.   
  185.                processInfo.name= applicationInfo.loadLabel(PM).toString();  
  186.   
  187.                processInfo.icon= applicationInfo.loadIcon(PM);  
  188.   
  189.                if ((applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){  
  190.                    processInfo.isSystem=true;  
  191.                }else {  
  192.                    processInfo.isSystem=false;  
  193.                }  
  194.            } catch (PackageManager.NameNotFoundException e) {  
  195.                processInfo.name=processInfo.packageName;  
  196.                processInfo.icon=context.getResources().getDrawable(R.mipmap.ic_launcher);  
  197.                processInfo.isSystem=true;  
  198.                e.printStackTrace();  
  199.            }  
  200.            processInfoList.add(processInfo);  
  201.        }  
  202.        return processInfoList;  
  203.    }  
  204.   
  205.    /** 
  206.     * 6.0版本获取相应的进程信息 
  207.     * @param context 
  208.     * @return 
  209.     */  
  210.    public static List<ProcessInfoBean> getProcess6Info(Context context){  
  211.        ArrayList<ProcessInfoBean> processInfoList = new ArrayList<>();  
  212.        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
  213.            UsageStatsManager m = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);  
  214.            if (m != null) {  
  215.                long now = System.currentTimeMillis();  
  216.                //获取60秒之内的应用数据  
  217.                List<UsageStats> stats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000, now);  
  218.                ActivityManager systemService = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  219.                Log.i(TAG, "Running app number in last 60 seconds : " + stats.size());  
  220.                //取得最近运行的一个app,即当前运行的app  
  221.                if ((stats != null) && (!stats.isEmpty())) {  
  222.                    for (int i = 0; i < stats.size(); i++) {  
  223.                       /* if (stats.get(i).getLastTimeUsed() > stats.get(j).getLastTimeUsed()) { 
  224.                            j = i; 
  225.                        }*/  
  226.                        int i1 = stats.get(i).describeContents();  
  227.                        String processName = stats.get(i).getPackageName();  
  228.                        Log.i(TAG, "top running app is : " + processName);  
  229.                        PackageManager PM = context.getPackageManager();  
  230.                        ProcessInfoBean processInfo=new ProcessInfoBean();  
  231.                        int uidForName = Process.getUidForName(processName);  
  232.                        /*** 
  233.                         * 此方法未能成功获取进程的内存信息 
  234.                         */  
  235.                        Debug.MemoryInfo[] processMemoryInfo = systemService.getProcessMemoryInfo(new int[]{uidForName});  
  236.                        //获取已使用的大小:  
  237.                        processInfo.memeSize= processMemoryInfo[0].getTotalPrivateDirty()*1024;  
  238.                        processInfo.packageName= processName;  
  239.                        processInfo.appPid=uidForName;  
  240.                        //获取应用的名称  
  241.                        try {  
  242.                            ApplicationInfo applicationInfo = PM.getApplicationInfo(processInfo.getPackageName(), 0);  
  243.   
  244.                            processInfo.name= applicationInfo.loadLabel(PM).toString();  
  245.   
  246.                            processInfo.icon= applicationInfo.loadIcon(PM);  
  247.   
  248.                            if ((applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){  
  249.                                processInfo.isSystem=true;  
  250.                            }else {  
  251.                                processInfo.isSystem=false;  
  252.                            }  
  253.                        } catch (PackageManager.NameNotFoundException e) {  
  254.                            processInfo.name=processInfo.packageName;  
  255.                            processInfo.icon=context.getResources().getDrawable(R.mipmap.ic_launcher);  
  256.                            processInfo.isSystem=true;  
  257.                            e.printStackTrace();  
  258.                        }  
  259.                        processInfoList.add(processInfo);  
  260.                    }  
  261.                }  
  262.            }  
  263.        }  
  264.   
  265.        return processInfoList;  
  266.    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>