博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android取得系统信息和分辨率内存信息
阅读量:2189 次
发布时间:2019-05-02

本文共 6590 字,大约阅读时间需要 21 分钟。

android.os.Build.VERSION.SDK_INT;                        代替android.os.Build.VERSION.SDK,返回int类型

android.os.Build.VERSION.RELEASE;                      用户可见的版本 如 Android2.2

android.os.Build.VERSION.SDK;                                SDK 版本 对应系统版本 如返回8  --对应 Android2.2

android.os.Build.MODEL;                                             手机类型 HTC Desire

获取android当前可用内存大小  

private String getAvailMemory()    {          //获取android当前可用内存大小          ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);          MemoryInfo mi=new MemoryInfo();          am.getMemoryInfo(mi);          //mi.avaiMem;当前系统可用内存          return Formatter.formatFileSize(getBaseContext(), mi.availMem);          //将获得的内存大小规格化     	 }
获得系统总内存

private 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  	         localBufferedReader.close();  	     }catch(IOException e){  	           	     }  	     return Formatter.formatFileSize(getBaseContext(), initial_memory);  	     //Byte转位KB或MB  	       	 }
获取CPU最大频率(单位KHZ)

// 获取CPU最大频率(单位KHZ)     // "/system/bin/cat" 命令行     // "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" 存储最大频率的文件的路径        public  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);                        }                        in.close();                } catch (IOException ex) {                        ex.printStackTrace();                        result = "N/A";                }                return result.trim();        }
 

获取CPU最小频率(单位KHZ)

public  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();                } catch (IOException ex) {                        ex.printStackTrace();                        result = "N/A";                }                return result.trim();        }
  实时获取CPU当前频率(单位KHZ)

public  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();                } catch (FileNotFoundException e) {                        e.printStackTrace();                } catch (IOException e) {                        e.printStackTrace();                }                return result;        }

程序版本信息

try {    		 PackageManager pm = getPackageManager();    		 PackageInfo pinfo = pm.getPackageInfo(String类型 应用标识,PackageManager.GET_CONFIGURATIONS);    		 String versionCode = pinfo.versionName;    	 }     	catch (NameNotFoundException e)    	{    		e.printStackTrace(System.err);    	}

分辨率

// 获取屏幕密度(方法1)      int screenWidth  = getWindowManager().getDefaultDisplay().getWidth();       // 屏幕宽(像素,如:480px)      int screenHeight = getWindowManager().getDefaultDisplay().getHeight();      // 屏幕高(像素,如:800p)                        // 获取屏幕密度(方法2)      DisplayMetrics dm = new DisplayMetrics();      dm = getResources().getDisplayMetrics();            float density  = dm.density;        // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)      int densityDPI = dm.densityDpi;     // 屏幕密度(每寸像素:120/160/240/320)      float xdpi = dm.xdpi;                 float ydpi = dm.ydpi;            Log.e(TAG + "  DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);      Log.e(TAG + "  DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);            screenWidth  = dm.widthPixels;      // 屏幕宽(像素,如:480px)      screenHeight = dm.heightPixels;     // 屏幕高(像素,如:800px)                              // 获取屏幕密度(方法3)      dm = new DisplayMetrics();      getWindowManager().getDefaultDisplay().getMetrics(dm);            density  = dm.density;      // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)      densityDPI = dm.densityDpi;     // 屏幕密度(每寸像素:120/160/240/320)      xdpi = dm.xdpi;               ydpi = dm.ydpi;                  int screenWidthDip = dm.widthPixels;        // 屏幕宽(dip,如:320dip)      int screenHeightDip = dm.heightPixels;      // 屏幕宽(dip,如:533dip)                  screenWidth  = (int)(dm.widthPixels * density + 0.5f);      // 屏幕宽(px,如:480px)      screenHeight = (int)(dm.heightPixels * density + 0.5f);     // 屏幕高(px,如:800px)

方法一和方法二取大部分的设备的分辨率是没问题的,但是有的设备的分辨率需要乘上相应的密度像第三个方法那样如i9000(密度1.5),但是moto XT720密度1.5,但是不需要乘以密度。可能就是因为Android系统开源,不同的手机生产厂商没有统一的制造标准,来规定手机屏幕。

screenWidth  = (int)(dm.widthPixels * density + 0.5f);
这句表示小数点后一位四舍五入取整。

getWindowManager().getDefaultDisplay().getMetrics(dm)

    Initialize a DisplayMetrics object from this display's data.

getResources().getDisplayMetrics()

   Return the current display metrics that are in effect for this resource object. The returned object should be treated as read-only.
返回和资源有关的

 单位换算

density            DPI

 1     160             1dp = 1dip = 1px

 1.5     240     1dp = 1dip = 1.5px

120dpi 对应资源中的res/XXX-ldpi

160dpi 对应资源中的res/XXX-mdpi

240dpi 对应资源中的res/XXX-hdpi

320dpi    对应资源中的res/XXX-xhdpi  Android 2.2 API Level 8开始才有的分类

对应的比例3:4:6:8

1英寸 = 2.54厘米

1英尺 = 0.3048米

转载地址:http://gyyub.baihongyu.com/

你可能感兴趣的文章
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
如何应用 BERT :Bidirectional Encoder Representations from Transformers
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南3:并发三大问题与volatile关键字,CAS操作
查看>>
Java并发指南4:Java中的锁 Lock和synchronized
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>