Android取得系统信息和分辨率内存信息

2024-06-17 10:48

本文主要是介绍Android取得系统信息和分辨率内存信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android取得系统信息和分辨率内存信息       
        分类:            Android 186人阅读 评论(0) 收藏 举报
android Android 内存 分辨率


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当前可用内存大小 

[java] view plain copy print ?
  1. private String getAvailMemory() 
  2.   {   
  3.       //获取android当前可用内存大小   
  4.       ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);   
  5.       MemoryInfo mi=new MemoryInfo();   
  6.       am.getMemoryInfo(mi);   
  7.       //mi.avaiMem;当前系统可用内存   
  8.       return Formatter.formatFileSize(getBaseContext(), mi.availMem);   
  9.       //将获得的内存大小规格化   
  10.      }   
  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);  //将获得的内存大小规格化  }  


获得系统总内存

[java] view plain copy print ?
  1. private String getTotalMemory() 
  2. {   
  3.     String str1="/proc/meminfo";//系统内存信息文件   
  4.     String str2;   
  5.     String[] arrayOfString;   
  6.     long initial_memory=0;   
  7.        
  8.     try{   
  9.         FileReader localFileReader=new FileReader(str1);   
  10.         BufferedReader localBufferedReader=new BufferedReader(localFileReader,8192);   
  11.         str2=localBufferedReader.readLine();//读取meminfo第一行,系统内存大小   
  12.         arrayOfString=str2.split("\\s+");   
  13.         for(String num:arrayOfString){   
  14.             Log.i(str2,num+"\t");   
  15.         }   
  16.         initial_memory=Integer.valueOf(arrayOfString[1]).intValue()*1024;//获得系统总内存,单位KB   
  17.         localBufferedReader.close();   
  18.     }catch(IOException e){   
  19.            
  20.     }   
  21.     return Formatter.formatFileSize(getBaseContext(), initial_memory);   
  22.     //Byte转位KB或MB   
  23.        
  24. }   
	 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)


[java] view plain copy print ?
  1. // 获取CPU最大频率(单位KHZ) 
  2.     // "/system/bin/cat" 命令行 
  3.     // "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" 存储最大频率的文件的路径 
  4.        public  String getMaxCpuFreq() { 
  5.                String result = ""
  6.                ProcessBuilder cmd; 
  7.                try
  8.                        String[] args = { "/system/bin/cat"
  9.                                        "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" }; 
  10.                        cmd = new ProcessBuilder(args); 
  11.                        Process process = cmd.start(); 
  12.                        InputStream in = process.getInputStream(); 
  13.                        byte[] re = new byte[24]; 
  14.                        while (in.read(re) != -1) { 
  15.                                result = result + new String(re); 
  16.                        } 
  17.                        in.close(); 
  18.                } catch (IOException ex) { 
  19.                        ex.printStackTrace(); 
  20.                        result = "N/A"
  21.                } 
  22.                return result.trim(); 
  23.        } 
 // 获取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)

[java] view plain copy print ?
  1. public  String getMinCpuFreq() { 
  2.               String result = ""
  3.               ProcessBuilder cmd; 
  4.               try
  5.                       String[] args = { "/system/bin/cat"
  6.                                       "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq" }; 
  7.                       cmd = new ProcessBuilder(args); 
  8.                       Process process = cmd.start(); 
  9.                       InputStream in = process.getInputStream(); 
  10.                       byte[] re = new byte[24]; 
  11.                       while (in.read(re) != -1) { 
  12.                               result = result + new String(re); 
  13.                       } 
  14.                       in.close(); 
  15.               } catch (IOException ex) { 
  16.                       ex.printStackTrace(); 
  17.                       result = "N/A"
  18.               } 
  19.               return result.trim(); 
  20.       } 
  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)

[java] view plain copy print ?
  1. public  String getCurCpuFreq() { 
  2.              String result = "N/A"
  3.              try
  4.                      FileReader fr = new FileReader( 
  5.                                      "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"); 
  6.                      BufferedReader br = new BufferedReader(fr); 
  7.                      String text = br.readLine(); 
  8.                      result = text.trim(); 
  9.              } catch (FileNotFoundException e) { 
  10.                      e.printStackTrace(); 
  11.              } catch (IOException e) { 
  12.                      e.printStackTrace(); 
  13.              } 
  14.              return result; 
  15.      } 
   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;}



程序版本信息

[java] view plain copy print ?
  1. try
  2.              PackageManager pm = getPackageManager(); 
  3.              PackageInfo pinfo = pm.getPackageInfo(String类型 应用标识,PackageManager.GET_CONFIGURATIONS); 
  4.              String versionCode = pinfo.versionName; 
  5.          }  
  6.         catch (NameNotFoundException e) 
  7.         { 
  8.             e.printStackTrace(System.err); 
  9.         } 
try {PackageManager pm = getPackageManager();PackageInfo pinfo = pm.getPackageInfo(String类型 应用标识,PackageManager.GET_CONFIGURATIONS);String versionCode = pinfo.versionName;} catch (NameNotFoundException e){e.printStackTrace(System.err);}


分辨率

[java] view plain copy print ?
  1. // 获取屏幕密度(方法1)   
  2. int screenWidth  = getWindowManager().getDefaultDisplay().getWidth();       // 屏幕宽(像素,如:480px)   
  3. int screenHeight = getWindowManager().getDefaultDisplay().getHeight();      // 屏幕高(像素,如:800p)   
  4.    
  5.  
  6.    
  7.    
  8. // 获取屏幕密度(方法2)   
  9. DisplayMetrics dm = new DisplayMetrics();   
  10. dm = getResources().getDisplayMetrics();   
  11.    
  12. float density  = dm.density;        // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)   
  13. int densityDPI = dm.densityDpi;     // 屏幕密度(每寸像素:120/160/240/320)   
  14. float xdpi = dm.xdpi;              
  15. float ydpi = dm.ydpi;   
  16.    
  17. Log.e(TAG + "  DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);   
  18. Log.e(TAG + "  DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);   
  19.    
  20. screenWidth  = dm.widthPixels;      // 屏幕宽(像素,如:480px)   
  21. screenHeight = dm.heightPixels;     // 屏幕高(像素,如:800px)   
  22.    
  23.  
  24.    
  25.    
  26.    
  27. // 获取屏幕密度(方法3)   
  28. dm = new DisplayMetrics();   
  29. getWindowManager().getDefaultDisplay().getMetrics(dm);   
  30.    
  31. density  = dm.density;      // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)   
  32. densityDPI = dm.densityDpi;     // 屏幕密度(每寸像素:120/160/240/320)   
  33. xdpi = dm.xdpi;            
  34. ydpi = dm.ydpi;   
  35.    
  36.  
  37.    
  38. int screenWidthDip = dm.widthPixels;        // 屏幕宽(dip,如:320dip)   
  39. int screenHeightDip = dm.heightPixels;      // 屏幕宽(dip,如:533dip)   
  40.    
  41.  
  42.    
  43. screenWidth  = (int)(dm.widthPixels * density + 0.5f);      // 屏幕宽(px,如:480px)   
  44. screenHeight = (int)(dm.heightPixels * density + 0.5f);     // 屏幕高(px,如:800px)   
  45.    
    // 获取屏幕密度(方法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系统开源,不同的手机生产厂商没有统一的制造标准,来规定手机屏幕。

[java] view plain copy print ?
  1. screenWidth  = (int)(dm.widthPixels * density + 0.5f);  
    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米

这篇关于Android取得系统信息和分辨率内存信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069233

相关文章

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序