Android系统信息(内存、cpu、sd卡、电量、版本)获取

Android系统信息(内存、cpu、sd卡、电量、版本)获取

/*APPInfo.java*/
public class AppInfo {
    private String appLable;
    private Drawable appicon;
    private String pkgName;
    private String versionCode;
    private String versionName;
    private int service;
    private String num;
    private boolean isCheck;
    private int pid;
    
    public AppInfo(String appLable, Drawable appicon, String pkgName,
            String versionCode, String versionName, int service, String num,
            boolean isCheck, int pid) {
        super();
        this.appLable = appLable;
        this.appicon = appicon;
        this.pkgName = pkgName;
        this.versionCode = versionCode;
        this.versionName = versionName;
        this.service = service;
        this.num = num;
        this.isCheck = isCheck;
        this.pid = pid;
    }
    
    public AppInfo() {
        super();
    }
    
    public String getAppLable() {
        return appLable;
    }
    public void setAppLable(String appLable) {
        this.appLable = appLable;
    }
    
    public Drawable getAppicon() {
        return appicon;
    }
    public void setAppicon(Drawable appicon) {
        this.appicon = appicon;
    }
    
    public String getPkgName() {
        return pkgName;
    }
    public void setPkgName(String pkgName) {
        this.pkgName = pkgName;
    }
    
    public String getVersionCode() {
        return versionCode;
    }
    public void setVersionCode(String versionCode) {
        this.versionCode = versionCode;
    }
    
    public String getVersionName() {
        return versionName;
    }
    public void setVersionName(String versionName) {
        this.versionName = versionName;
    }
    
    public int getService() {
        return service;
    }
    public void setService(int service) {
        this.service = service;
    }
    
    public String getNum() {
        return num;
    }
    public void setNum(String num) {
        this.num = num;
    }
    
    public boolean isCheck() {
        return isCheck;
    }
    public void setCheck(boolean isCheck) {
        this.isCheck = isCheck;
    }
    
    public int getPid() {
        return pid;
    }
    public void setPid(int pid) {
        this.pid = pid;
    }
}
 
/* AppInfoManager.java */
public class AppInfoManager {
    ArrayList<AppInfo> allapp;
    List<RunningAppProcessInfo> runningAppProcessInfos;
    private Context context;
    private ActivityManager mActivityManager;
    public AppInfoManager(Context context) {
        this.context=context;
        mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
    }
    
    //全部应用
    public ArrayList<AppInfo> getAllApp(){
        ArrayList<AppInfo> allapp = new ArrayList<AppInfo>();
        PackageManager packageManager=context.getPackageManager();
        List<PackageInfo> packages=packageManager.getInstalledPackages(0);
        for(int i=0; i<packages.size(); i++){
            PackageInfo packageInfo=packages.get(i);
            AppInfo appInfo=new AppInfo();
            appInfo.setAppLable((String) packageInfo.applicationInfo.loadLabel(packageManager));
            appInfo.setPkgName(packageInfo.packageName);
            appInfo.setVersionName(packageInfo.versionName);
            appInfo.setVersionCode(packageInfo.versionCode+"");
            appInfo.setAppicon(packageInfo.applicationInfo.loadIcon(packageManager));
            allapp.add(appInfo);
        }
        return allapp;
    }
    
    //获取系统手机应用信息
    public List<AppInfo> getSystemApp(){
        ArrayList<AppInfo> appList = new ArrayList<AppInfo>();
        PackageManager packageManager=context.getPackageManager();
        List<PackageInfo> packages=packageManager.getInstalledPackages(0);
        for(int i=0; i<packages.size(); i++){
            PackageInfo packageInfo=packages.get(i);
            AppInfo appInfo=new AppInfo();
            appInfo.setAppLable((String) packageInfo.applicationInfo.loadLabel(packageManager));
            appInfo.setPkgName(packageInfo.packageName);
//            appInfo.setService(packageInfo.services.length);
            appInfo.setVersionName(packageInfo.versionName);
            appInfo.setVersionCode(packageInfo.versionCode+"");
            appInfo.setAppicon(packageInfo.applicationInfo.loadIcon(packageManager));
            
            if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0){
                appList.add(appInfo);
            }
        }
        return appList;
    }
    
    //获得第三方应用
    public ArrayList<AppInfo> getThirsApp(){
        ArrayList<AppInfo> appList = new ArrayList<AppInfo>();
        PackageManager packageManager=context.getPackageManager();
        List<PackageInfo> packages=packageManager.getInstalledPackages(0);
        for(int i=0;i<packages.size();i++){
            PackageInfo packageInfo=packages.get(i);
            AppInfo appInfo=new AppInfo();
            appInfo.setAppLable((String) packageInfo.applicationInfo.loadLabel(packageManager));
            appInfo.setPkgName(packageInfo.packageName);
            appInfo.setVersionName(packageInfo.versionName);
            appInfo.setVersionCode(packageInfo.versionCode+"");
            appInfo.setAppicon(packageInfo.applicationInfo.loadIcon(packageManager));
            if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0){
                appList.add(appInfo);
            }
        }
        return appList;
    }
        
    //获取手机占用内存
    public String getAvailMemory() {// 获取android当前可用内存大小  
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
        MemoryInfo mi = new MemoryInfo();  
        am.getMemoryInfo(mi);  
        //mi.availMem; 当前系统的可用内存  
        return Formatter.formatFileSize(context, mi.availMem);// 将获取的内存大小规格化  
    }  

    //获取手机全部内存
    public String getTotalMemory() {  
        String str1 = "/proc/meminfo";// 系统内存信息文件  
        String str2;  
        String[] arrayOfString;  
        long initial_memory = 0;  
  
        try {  
            FileReader localFileReader = new FileReader(str1);  
            BufferedReader localBufferedReader = new BufferedReader(localFileReader, 8192);  
            str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小  
  
            arrayOfString = str2.split("\s+");  
            for (String num : arrayOfString) {  
                Log.i(str2, num + "/t");  
            }  
          
            initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte  
            localBufferedReader.close();
        } catch (IOException e) {  
        }  
        return Formatter.formatFileSize(context, initial_memory);// Byte转换为KB或者MB,内存大小规格化  
    }  
    
    //获取手机正在运行的软件信息
    public ArrayList<AppInfo> getRunningAppInfo(){
        ArrayList<AppInfo> thirdAppNameList = new ArrayList<AppInfo>();  
        ArrayList<AppInfo> nowRunningApp = new ArrayList<AppInfo>();  
        thirdAppNameList = getThirsApp();  //用户程序
        runningAppProcessInfos = mActivityManager.getRunningAppProcesses();//获取正在运行的程序
        for (int i = 0; i < thirdAppNameList.size(); i++) {
            for (int j = 0; j < runningAppProcessInfos.size(); j++) {
                if(thirdAppNameList.get(i).getPkgName().equals(runningAppProcessInfos.get(j).processName)){
                    
                    int pid= runningAppProcessInfos.get(j).pid;  //包名匹配

                    //内存信息
                    Debug.MemoryInfo[] memoryInfos = mActivityManager.getProcessMemoryInfo(new int[]{pid});
                    String p = Formatter.formatFileSize(context, memoryInfos[0].dalvikPrivateDirty*1024);
                    
                    // 获得系统总内存,单位是KB,乘以1024转换为Byte,然后规格化
                    AppInfo app = new AppInfo();
                    app.setAppLable(thirdAppNameList.get(i).getAppLable());
                    app.setAppicon(thirdAppNameList.get(i).getAppicon());
                    app.setService(thirdAppNameList.get(i).getService());
                    app.setPid(pid);
                    app.setPkgName(thirdAppNameList.get(i).getPkgName());
                    app.setNum(p);
                    nowRunningApp.add(app);
                }
            }
        }
        return nowRunningApp;
    }  
}
/* PhoneManager.java */
public class PhoneManager {
    private Context context;
    public PhoneManager(Context context ){
        this.context=context;
    }
    
    //是否root
    public boolean isRoot(){
        boolean bool = false;
        try{
            if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exists())){
                bool = false;
            } else {
                bool = true;
            }
        } catch (Exception e) {

        } 
        return bool;
    }
    
    //cpu参数
    public static String getMaxCpuFreq() {
        String result = "";
        ProcessBuilder cmd;
        try {
            String[] args = { "/system/bin/cat",
            "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" };
            cmd = new ProcessBuilder(args);
            Process process = cmd.start();
            InputStream in = process.getInputStream();
            byte[] re = new byte[24];
            while (in.read(re) != -1) {
                result = result + new String(re);
            }
            if(!"".equals(result.trim())){
                result=""+(Integer.parseInt(result.trim())/1000);
            }
            in.close();
        } catch (IOException ex) {
            ex.printStackTrace();
            result = "N/A";
        }
        return result ;
    }

    // 获取CPU最小频率(单位KHZ)
    public static String getMinCpuFreq() {
        String result = "";
        ProcessBuilder cmd;
        try {
            String[] args = { "/system/bin/cat",
            "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq" };
            cmd = new ProcessBuilder(args);
            Process process = cmd.start();
            InputStream in = process.getInputStream();
            byte[] re = new byte[24];
            while (in.read(re) != -1) {
                result = result + new String(re);
            }
            in.close();
            if(!"".equals(result.trim())){
                result=""+(Integer.parseInt(result.trim())/1000);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
            result = "N/A";
        }
        return result.trim();
    }

    // 实时获取CPU当前频率(单位KHZ)
    public static String getCurCpuFreq() {
        String result = "N/A";
        try {
            FileReader fr = new FileReader(
                    "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq");
            BufferedReader br = new BufferedReader(fr);
            String text = br.readLine();
            result = text.trim();
            if(!"N/A".equals(result.trim())){
                result=""+(Integer.parseInt(result.trim())/1000);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

    // 获取CPU名字
    public static String getCpuName() {
        try {
            FileReader fr = new FileReader("/proc/cpuinfo");
            BufferedReader br = new BufferedReader(fr);
            String text = br.readLine();
            String[] array = text.split(":\s+", 2);
            for (int i = 0; i < array.length; i++) {
            }
            return array[1];
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    // 获取CPU核数
    public static int getNumCores() { 
        //Private Class to display only CPU devices in the directory listing 
        class CpuFilter implements FileFilter { 
        @Override 
        public boolean accept(File pathname) { 
            //Check if filename is "cpu", followed by a single digit number 
            if(Pattern.matches("cpu[0-9]", pathname.getName())) { 
                return true; 
            } 
                return false; 
            } 
        } 
        try { 
        //Get directory containing CPU info 
        File dir = new File("/sys/devices/system/cpu/"); 
        //Filter to only list the devices we care about 
        File[] files = dir.listFiles(new CpuFilter()); 
            //Return the number of cores (virtual CPU devices) 
            return files.length; 
        } catch(Exception e) { 
            //Default to return 1 core 
            return 1; 
        } 
    }
    
    //SD卡大小
    public String getSDTotalSize() {  
        File path = Environment.getExternalStorageDirectory();  
        StatFs stat = new StatFs(path.getPath());  
        long blockSize = stat.getBlockSize();  
        long totalBlocks = stat.getBlockCount();  
        return Formatter.formatFileSize(context, blockSize * totalBlocks);  
    }  
    
    // 判断设备是否支持多点触控  
    public static boolean isSupportMultiTouch(Context context) {  
        PackageManager pm = context.getPackageManager();  
        boolean isSupportMultiTouch = pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH);  
        return isSupportMultiTouch;  
    } 
    
    //手机分辨率
    public String getWindow(){
        WindowManager wm=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        int height=wm.getDefaultDisplay().getHeight();
        int width = wm.getDefaultDisplay().getWidth();
        return height+"*"+width;
    }
    
    //手机像素密度
    public static String  getDen(){
        DisplayMetrics metric = new DisplayMetrics();
        float density = metric.density;
        return density+"";
    }
    
    // .获取手机MAC地址 , 只有手机开启wifi才能获取到mac地址 
    public String getMacAddress(){  
       String result = "";  
       WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);  
       WifiInfo wifiInfo = wifiManager.getConnectionInfo();  
       result = wifiInfo.getMacAddress();  
       Log.i("text", "手机macAdd:" + result);  
       return result;  
    }  

    //得到网络类型
    public String getNet(){
        String net=null;
        TelephonyManager mTm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
        switch (mTm.getNetworkType()) {
        case TelephonyManager.NETWORK_TYPE_UNKNOWN:
            net="未知网络";
            break;
        case TelephonyManager.NETWORK_TYPE_GPRS:
            net="GPRS网络"; 
            break;
        case TelephonyManager.NETWORK_TYPE_EDGE:
            net="EDGE网络"; 
            break;
        case TelephonyManager. NETWORK_TYPE_UMTS :
            net="UMTS网络";
            break;
        case TelephonyManager.NETWORK_TYPE_HSUPA :
            net="HSUPA网络";
            break;
        case TelephonyManager.NETWORK_TYPE_HSPA:
            net="HSPA网络";
            break;
        case TelephonyManager.NETWORK_TYPE_CDMA :
            net="CDMA网络";
            break;
        case TelephonyManager. NETWORK_TYPE_EVDO_0:
            net="EVDO0网络";
            break;
        case TelephonyManager.NETWORK_TYPE_HSDPA:
            net="HSDPA网络";
            break;
        }
        return net;
    }
}

参考链接:http://gqdy365.iteye.com/blog/1066113

原文地址:https://www.cnblogs.com/klcf0220/p/3470251.html