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

相关文章

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环