当前位置:   article > 正文

Android 设备信息获取详解

android 获取设备信息

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、获取手机基本信息(厂商、型号等参数)
二、设备信息获取实现图
三、获取手机设备 宽、高、IMEI 信息
四、获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名
五、获取手机硬件名、SDK版本、android版本 、语言支持、默认语言
六、获取 SD 卡存储信息
七、获取手机 RAM、ROM存储信息
八、DeviceInfoUtils 封装类
九、SDCardUtils 封装类

下面将讲解以上信息的获取方法。

一、 获取手机基本信息(厂商、型号等参数)

以小米手机为例,手机常用的基本信息可以在Settings--> About Phone中看到,
例如下图:

小米手机设备信息图

那么如何获取这些设备信息呢? Android中 通常通过 android.os.Build类方法可以获取更多手机设备信息。

二、 设备信息获取实现图

获取手机IMEI、宽、高、是否有SD卡,RAM、ROM、SD卡、是否联网、网络类型

默认语言,设备名,型号、厂商、Fingerprint、Android 版本、SDK版本、Google 安全patch、发布时间、版本类型、用户名

产品名、ID、产品名、主板名

三、 获取手机设备 宽、高、IMEI 信息方法

获取手机宽、高、IMEI信息方法如下:

  1. /**
  2. * 获取设备宽度(px)
  3. *
  4. */
  5. public static int getDeviceWidth(Context context) {
  6. return context.getResources().getDisplayMetrics().widthPixels;
  7. }
  8. /**
  9. * 获取设备高度(px)
  10. */
  11. public static int getDeviceHeight(Context context) {
  12. return context.getResources().getDisplayMetrics().heightPixels;
  13. }
  14. /**
  15. * 获取设备的唯一标识, 需要 “android.permission.READ_Phone_STATE”权限
  16. */
  17. public static String getIMEI(Context context) {
  18. TelephonyManager tm = (TelephonyManager) context
  19. .getSystemService(Context.TELEPHONY_SERVICE);
  20. String deviceId = tm.getDeviceId();
  21. if (deviceId == null) {
  22. return "UnKnown";
  23. } else {
  24. return deviceId;
  25. }
  26. }

注意:获取IMEI 需要获取手机状态权限

  1. <!-- 读取手机IMEI的设备权限 -->
  2. <uses-permission android:name="android.permission.READ_PHONE_STATE" />

如果是Android 6.0 之后的代码请使用动态申请权限的方法申请权限,否认会报安全异常的错误SecurityException,进而导致运行报错。

如需了解更多 系统安全权限的内容,请看 之前写的文章 Android 系统权限使用详解

四、 获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名的方法

获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名的方法如下:

  1. /**
  2. * 获取厂商名
  3. * **/
  4. public static String getDeviceManufacturer() {
  5. return android.os.Build.MANUFACTURER;
  6. }
  7. /**
  8. * 获取产品名
  9. * **/
  10. public static String getDeviceProduct() {
  11. return android.os.Build.PRODUCT;
  12. }
  13. /**
  14. * 获取手机品牌
  15. */
  16. public static String getDeviceBrand() {
  17. return android.os.Build.BRAND;
  18. }
  19. /**
  20. * 获取手机型号
  21. */
  22. public static String getDeviceModel() {
  23. return android.os.Build.MODEL;
  24. }
  25. /**
  26. * 获取手机主板名
  27. */
  28. public static String getDeviceBoard() {
  29. return android.os.Build.BOARD;
  30. }
  31. /**
  32. * 设备名
  33. * **/
  34. public static String getDeviceDevice() {
  35. return android.os.Build.DEVICE;
  36. }
  37. /**
  38. *
  39. *
  40. * fingerprit 信息
  41. * **/
  42. public static String getDeviceFubgerprint() {
  43. return android.os.Build.FINGERPRINT;
  44. }

五、 获取手机硬件名、SDK版本、android版本 、语言支持、默认语言等方法

获取手机硬件名、SDK版本android版本 、语言支持、默认语言等方法如下:

  1. /**
  2. * 硬件名
  3. *
  4. * **/
  5. public static String getDeviceHardware() {
  6. return android.os.Build.HARDWARE;
  7. }
  8. /**
  9. * 主机
  10. *
  11. * **/
  12. public static String getDeviceHost() {
  13. return android.os.Build.HOST;
  14. }
  15. /**
  16. *
  17. * 显示ID
  18. * **/
  19. public static String getDeviceDisplay() {
  20. return android.os.Build.DISPLAY;
  21. }
  22. /**
  23. * ID
  24. *
  25. * **/
  26. public static String getDeviceId() {
  27. return android.os.Build.ID;
  28. }
  29. /**
  30. * 获取手机用户名
  31. *
  32. * **/
  33. public static String getDeviceUser() {
  34. return android.os.Build.USER;
  35. }
  36. /**
  37. * 获取手机 硬件序列号
  38. * **/
  39. public static String getDeviceSerial() {
  40. return android.os.Build.SERIAL;
  41. }
  42. /**
  43. * 获取手机Android 系统SDK
  44. *
  45. * @return
  46. */
  47. public static int getDeviceSDK() {
  48. return android.os.Build.VERSION.SDK_INT;
  49. }
  50. /**
  51. * 获取手机Android 版本
  52. *
  53. * @return
  54. */
  55. public static String getDeviceAndroidVersion() {
  56. return android.os.Build.VERSION.RELEASE;
  57. }
  58. /**
  59. * 获取当前手机系统语言。
  60. */
  61. public static String getDeviceDefaultLanguage() {
  62. return Locale.getDefault().getLanguage();
  63. }
  64. /**
  65. * 获取当前系统上的语言列表(Locale列表)
  66. */
  67. public static String getDeviceSupportLanguage() {
  68. Log.e("wangjie", "Local:" + Locale.GERMAN);
  69. Log.e("wangjie", "Local:" + Locale.ENGLISH);
  70. Log.e("wangjie", "Local:" + Locale.US);
  71. Log.e("wangjie", "Local:" + Locale.CHINESE);
  72. Log.e("wangjie", "Local:" + Locale.TAIWAN);
  73. Log.e("wangjie", "Local:" + Locale.FRANCE);
  74. Log.e("wangjie", "Local:" + Locale.FRENCH);
  75. Log.e("wangjie", "Local:" + Locale.GERMANY);
  76. Log.e("wangjie", "Local:" + Locale.ITALIAN);
  77. Log.e("wangjie", "Local:" + Locale.JAPAN);
  78. Log.e("wangjie", "Local:" + Locale.JAPANESE);
  79. return Locale.getAvailableLocales().toString();
  80. }

六、 获取 SD 卡存储信息

SD卡信息

1.判断SD是否挂载方法

判断SD是否挂载方法如下:

  1. /**
  2. * 判断SD是否挂载
  3. */
  4. public static boolean isSDCardMount() {
  5. return Environment.getExternalStorageState().equals(
  6. Environment.MEDIA_MOUNTED);
  7. }

2. 获取SD 存储信息的方法

获取SD 存储信息的方法如下:

  1. /**
  2. * 获取手机存储 ROM 信息
  3. *
  4. * type:用于区分内置存储于外置存储的方法
  5. *
  6. * 内置SD卡 :INTERNAL_STORAGE = 0;
  7. *
  8. * 外置SD卡:EXTERNAL_STORAGE = 1;
  9. * **/
  10. public static String getStorageInfo(Context context, int type) {
  11. String path = getStoragePath(context, type);
  12. /**
  13. * 无外置SD 卡判断
  14. * **/
  15. if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) {
  16. return "无外置SD卡";
  17. }
  18. File file = new File(path);
  19. StatFs statFs = new StatFs(file.getPath());
  20. String stotageInfo;
  21. long blockCount = statFs.getBlockCountLong();
  22. long bloackSize = statFs.getBlockSizeLong();
  23. long totalSpace = bloackSize * blockCount;
  24. long availableBlocks = statFs.getAvailableBlocksLong();
  25. long availableSpace = availableBlocks * bloackSize;
  26. stotageInfo = "可用/总共:"
  27. + Formatter.formatFileSize(context, availableSpace) + "/"
  28. + Formatter.formatFileSize(context, totalSpace);
  29. return stotageInfo;
  30. }

3. 获取手机ROM (内置存储,外置存储)存储路径的方法

获取手机ROM 存储信息的方法如下:

  1. /**
  2. * 使用反射方法 获取手机存储路径
  3. *
  4. * **/
  5. public static String getStoragePath(Context context, int type) {
  6. StorageManager sm = (StorageManager) context
  7. .getSystemService(Context.STORAGE_SERVICE);
  8. try {
  9. Method getPathsMethod = sm.getClass().getMethod("getVolumePaths",
  10. null);
  11. String[] path = (String[]) getPathsMethod.invoke(sm, null);
  12. switch (type) {
  13. case INTERNAL_STORAGE:
  14. return path[type];
  15. case EXTERNAL_STORAGE:
  16. if (path.length > 1) {
  17. return path[type];
  18. } else {
  19. return null;
  20. }
  21. default:
  22. break;
  23. }
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. return null;
  28. }
  29. /**
  30. * 获取 手机 RAM 信息 方法 一
  31. * */
  32. public static String getTotalRAM(Context context) {
  33. long size = 0;
  34. ActivityManager activityManager = (ActivityManager) context
  35. .getSystemService(context.ACTIVITY_SERVICE);
  36. MemoryInfo outInfo = new MemoryInfo();
  37. activityManager.getMemoryInfo(outInfo);
  38. size = outInfo.totalMem;
  39. return Formatter.formatFileSize(context, size);
  40. }
  41. /**
  42. * 手机 RAM 信息 方法 二
  43. * */
  44. public static String getTotalRAMOther(Context context) {
  45. String path = "/proc/meminfo";
  46. String firstLine = null;
  47. int totalRam = 0;
  48. try {
  49. FileReader fileReader = new FileReader(path);
  50. BufferedReader br = new BufferedReader(fileReader, 8192);
  51. firstLine = br.readLine().split("\\s+")[1];
  52. br.close();
  53. } catch (Exception e) {
  54. e.printStackTrace();
  55. }
  56. if (firstLine != null) {
  57. totalRam = (int) Math.ceil((new Float(Float.valueOf(firstLine)
  58. / (1024 * 1024)).doubleValue()));
  59. long totalBytes = 0;
  60. }
  61. return Formatter.formatFileSize(context, totalRam);
  62. }
  63. /**
  64. * 获取 手机 可用 RAM
  65. * */
  66. public static String getAvailableRAM(Context context) {
  67. long size = 0;
  68. ActivityManager activityManager = (ActivityManager) context
  69. .getSystemService(context.ACTIVITY_SERVICE);
  70. MemoryInfo outInfo = new MemoryInfo();
  71. activityManager.getMemoryInfo(outInfo);
  72. size = outInfo.availMem;
  73. return Formatter.formatFileSize(context, size);
  74. }

七、获取手机 RAM、ROM存储信息

1.RAM:

运行时内存,此大小直接决定手机运行的流畅度,相当于电脑内存。

2.ROM :

手机存储(分内置SD卡,外置SD卡),此大小直接决定着手机可以存储资源的大小,相当于电脑硬盘。

以红米手机为例:
RAM= 1904716KB= 1.82G

红米4 手机 RAM、ROM存储信息

红米4 memory 信息 meminfo

3.获取 RAM存储信息的方法如下:

  1. /**
  2. * 获取 手机 RAM 信息
  3. * */
  4. public static String getRAMInfo(Context context) {
  5. long totalSize = 0;
  6. long availableSize = 0;
  7. ActivityManager activityManager = (ActivityManager) context
  8. .getSystemService(context.ACTIVITY_SERVICE);
  9. MemoryInfo memoryInfo = new MemoryInfo();
  10. activityManager.getMemoryInfo(memoryInfo);
  11. totalSize = memoryInfo.totalMem;
  12. availableSize = memoryInfo.availMem;
  13. return "可用/总共:" + Formatter.formatFileSize(context, availableSize)
  14. + "/" + Formatter.formatFileSize(context, totalSize);
  15. }

4. 获取手机ROM存储信息的方法如下:

  1. /**
  2. * 获取手机存储 ROM 信息
  3. *
  4. * type:用于区分内置存储于外置存储的方法
  5. *
  6. * 内置SD卡 :INTERNAL_STORAGE = 0;
  7. *
  8. * 外置SD卡:EXTERNAL_STORAGE = 1;
  9. * **/
  10. public static String getStorageInfo(Context context, int type) {
  11. String path = getStoragePath(context, type);
  12. /**
  13. * 无外置SD 卡判断
  14. * **/
  15. if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) {
  16. return "无外置SD卡";
  17. }
  18. File file = new File(path);
  19. StatFs statFs = new StatFs(file.getPath());
  20. String stotageInfo;
  21. long blockCount = statFs.getBlockCountLong();
  22. long bloackSize = statFs.getBlockSizeLong();
  23. long totalSpace = bloackSize * blockCount;
  24. long availableBlocks = statFs.getAvailableBlocksLong();
  25. long availableSpace = availableBlocks * bloackSize;
  26. stotageInfo = "可用/总共:"
  27. + Formatter.formatFileSize(context, availableSpace) + "/"
  28. + Formatter.formatFileSize(context, totalSpace);
  29. return stotageInfo;
  30. }

八、DeviceInfoUtils 封装类

为了方便查询使用设备信息,小编已经封装成一个Utils类。代码如下:

  1. package com.programandroid.Utils;
  2. import java.util.Locale;
  3. import android.R.string;
  4. import android.content.Context;
  5. import android.telephony.TelephonyManager;
  6. import android.util.Log;
  7. /*
  8. * DeviceInfoUtils.java
  9. *
  10. * Created on: 2017-11-16
  11. * Author: wangjie
  12. *
  13. * Welcome attention to weixin public number get more info
  14. *
  15. * WeiXin Public Number : ProgramAndroid
  16. * 微信公众号 :程序员Android
  17. *
  18. */
  19. public class DeviceInfoUtils {
  20. /**
  21. * 获取设备宽度(px)
  22. *
  23. */
  24. public static int getDeviceWidth(Context context) {
  25. return context.getResources().getDisplayMetrics().widthPixels;
  26. }
  27. /**
  28. * 获取设备高度(px)
  29. */
  30. public static int getDeviceHeight(Context context) {
  31. return context.getResources().getDisplayMetrics().heightPixels;
  32. }
  33. /**
  34. * 获取设备的唯一标识, 需要 “android.permission.READ_Phone_STATE”权限
  35. */
  36. public static String getIMEI(Context context) {
  37. TelephonyManager tm = (TelephonyManager) context
  38. .getSystemService(Context.TELEPHONY_SERVICE);
  39. String deviceId = tm.getDeviceId();
  40. if (deviceId == null) {
  41. return "UnKnown";
  42. } else {
  43. return deviceId;
  44. }
  45. }
  46. /**
  47. * 获取厂商名
  48. * **/
  49. public static String getDeviceManufacturer() {
  50. return android.os.Build.MANUFACTURER;
  51. }
  52. /**
  53. * 获取产品名
  54. * **/
  55. public static String getDeviceProduct() {
  56. return android.os.Build.PRODUCT;
  57. }
  58. /**
  59. * 获取手机品牌
  60. */
  61. public static String getDeviceBrand() {
  62. return android.os.Build.BRAND;
  63. }
  64. /**
  65. * 获取手机型号
  66. */
  67. public static String getDeviceModel() {
  68. return android.os.Build.MODEL;
  69. }
  70. /**
  71. * 获取手机主板名
  72. */
  73. public static String getDeviceBoard() {
  74. return android.os.Build.BOARD;
  75. }
  76. /**
  77. * 设备名
  78. * **/
  79. public static String getDeviceDevice() {
  80. return android.os.Build.DEVICE;
  81. }
  82. /**
  83. *
  84. *
  85. * fingerprit 信息
  86. * **/
  87. public static String getDeviceFubgerprint() {
  88. return android.os.Build.FINGERPRINT;
  89. }
  90. /**
  91. * 硬件名
  92. *
  93. * **/
  94. public static String getDeviceHardware() {
  95. return android.os.Build.HARDWARE;
  96. }
  97. /**
  98. * 主机
  99. *
  100. * **/
  101. public static String getDeviceHost() {
  102. return android.os.Build.HOST;
  103. }
  104. /**
  105. *
  106. * 显示ID
  107. * **/
  108. public static String getDeviceDisplay() {
  109. return android.os.Build.DISPLAY;
  110. }
  111. /**
  112. * ID
  113. *
  114. * **/
  115. public static String getDeviceId() {
  116. return android.os.Build.ID;
  117. }
  118. /**
  119. * 获取手机用户名
  120. *
  121. * **/
  122. public static String getDeviceUser() {
  123. return android.os.Build.USER;
  124. }
  125. /**
  126. * 获取手机 硬件序列号
  127. * **/
  128. public static String getDeviceSerial() {
  129. return android.os.Build.SERIAL;
  130. }
  131. /**
  132. * 获取手机Android 系统SDK
  133. *
  134. * @return
  135. */
  136. public static int getDeviceSDK() {
  137. return android.os.Build.VERSION.SDK_INT;
  138. }
  139. /**
  140. * 获取手机Android 版本
  141. *
  142. * @return
  143. */
  144. public static String getDeviceAndroidVersion() {
  145. return android.os.Build.VERSION.RELEASE;
  146. }
  147. /**
  148. * 获取当前手机系统语言。
  149. */
  150. public static String getDeviceDefaultLanguage() {
  151. return Locale.getDefault().getLanguage();
  152. }
  153. /**
  154. * 获取当前系统上的语言列表(Locale列表)
  155. */
  156. public static String getDeviceSupportLanguage() {
  157. Log.e("wangjie", "Local:" + Locale.GERMAN);
  158. Log.e("wangjie", "Local:" + Locale.ENGLISH);
  159. Log.e("wangjie", "Local:" + Locale.US);
  160. Log.e("wangjie", "Local:" + Locale.CHINESE);
  161. Log.e("wangjie", "Local:" + Locale.TAIWAN);
  162. Log.e("wangjie", "Local:" + Locale.FRANCE);
  163. Log.e("wangjie", "Local:" + Locale.FRENCH);
  164. Log.e("wangjie", "Local:" + Locale.GERMANY);
  165. Log.e("wangjie", "Local:" + Locale.ITALIAN);
  166. Log.e("wangjie", "Local:" + Locale.JAPAN);
  167. Log.e("wangjie", "Local:" + Locale.JAPANESE);
  168. return Locale.getAvailableLocales().toString();
  169. }
  170. public static String getDeviceAllInfo(Context context) {
  171. return "\n\n1. IMEI:\n\t\t" + getIMEI(context)
  172. + "\n\n2. 设备宽度:\n\t\t" + getDeviceWidth(context)
  173. + "\n\n3. 设备高度:\n\t\t" + getDeviceHeight(context)
  174. + "\n\n4. 是否有内置SD卡:\n\t\t" + SDCardUtils.isSDCardMount()
  175. + "\n\n5. RAM 信息:\n\t\t" + SDCardUtils.getRAMInfo(context)
  176. + "\n\n6. 内部存储信息\n\t\t" + SDCardUtils.getStorageInfo(context, 0)
  177. + "\n\n7. SD卡 信息:\n\t\t" + SDCardUtils.getStorageInfo(context, 1)
  178. + "\n\n8. 是否联网:\n\t\t" + Utils.isNetworkConnected(context)
  179. + "\n\n9. 网络类型:\n\t\t" + Utils.GetNetworkType(context)
  180. + "\n\n10. 系统默认语言:\n\t\t" + getDeviceDefaultLanguage()
  181. + "\n\n11. 硬件序列号(设备名):\n\t\t" + android.os.Build.SERIAL
  182. + "\n\n12. 手机型号:\n\t\t" + android.os.Build.MODEL
  183. + "\n\n13. 生产厂商:\n\t\t" + android.os.Build.MANUFACTURER
  184. + "\n\n14. 手机Fingerprint标识:\n\t\t" + android.os.Build.FINGERPRINT
  185. + "\n\n15. Android 版本:\n\t\t" + android.os.Build.VERSION.RELEASE
  186. + "\n\n16. Android SDK版本:\n\t\t" + android.os.Build.VERSION.SDK_INT
  187. + "\n\n17. 安全patch 时间:\n\t\t" + android.os.Build.VERSION.SECURITY_PATCH
  188. + "\n\n18. 发布时间:\n\t\t" + Utils.Utc2Local(android.os.Build.TIME)
  189. + "\n\n19. 版本类型:\n\t\t" + android.os.Build.TYPE
  190. + "\n\n20. 用户名:\n\t\t" + android.os.Build.USER
  191. + "\n\n21. 产品名:\n\t\t" + android.os.Build.PRODUCT
  192. + "\n\n22. ID:\n\t\t" + android.os.Build.ID
  193. + "\n\n23. 显示ID:\n\t\t" + android.os.Build.DISPLAY
  194. + "\n\n24. 硬件名:\n\t\t" + android.os.Build.HARDWARE
  195. + "\n\n25. 产品名:\n\t\t" + android.os.Build.DEVICE
  196. + "\n\n26. Bootloader:\n\t\t" + android.os.Build.BOOTLOADER
  197. + "\n\n27. 主板名:\n\t\t" + android.os.Build.BOARD
  198. + "\n\n28. CodeName:\n\t\t" + android.os.Build.VERSION.CODENAME
  199. + "\n\n29. 语言支持:\n\t\t" + getDeviceSupportLanguage();
  200. }
  201. }

九、SDCardUtils 封装类

为了方便查询使用设备信息,小编已经封装成一个Utils类。代码如下:

  1. package com.programandroid.Utils;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.lang.reflect.Method;
  6. import android.app.ActivityManager;
  7. import android.app.ActivityManager.MemoryInfo;
  8. import android.content.Context;
  9. import android.os.Build;
  10. import android.os.Environment;
  11. import android.os.StatFs;
  12. import android.os.storage.StorageManager;
  13. import android.text.TextUtils;
  14. import android.text.format.Formatter;
  15. /*
  16. * SDCardUtils.java
  17. *
  18. * Created on: 2017-11-22
  19. * Author: wangjie
  20. *
  21. * Welcome attention to weixin public number get more info
  22. *
  23. * WeiXin Public Number : ProgramAndroid
  24. * 微信公众号 :程序员Android
  25. *
  26. */
  27. public class SDCardUtils {
  28. private static final int INTERNAL_STORAGE = 0;
  29. private static final int EXTERNAL_STORAGE = 1;
  30. /**
  31. * 获取 手机 RAM 信息
  32. * */
  33. public static String getRAMInfo(Context context) {
  34. long totalSize = 0;
  35. long availableSize = 0;
  36. ActivityManager activityManager = (ActivityManager) context
  37. .getSystemService(context.ACTIVITY_SERVICE);
  38. MemoryInfo memoryInfo = new MemoryInfo();
  39. activityManager.getMemoryInfo(memoryInfo);
  40. totalSize = memoryInfo.totalMem;
  41. availableSize = memoryInfo.availMem;
  42. return "可用/总共:" + Formatter.formatFileSize(context, availableSize)
  43. + "/" + Formatter.formatFileSize(context, totalSize);
  44. }
  45. /**
  46. * 判断SD是否挂载
  47. */
  48. public static boolean isSDCardMount() {
  49. return Environment.getExternalStorageState().equals(
  50. Environment.MEDIA_MOUNTED);
  51. }
  52. /**
  53. * 获取手机存储 ROM 信息
  54. *
  55. * type:用于区分内置存储于外置存储的方法
  56. *
  57. * 内置SD卡 :INTERNAL_STORAGE = 0;
  58. *
  59. * 外置SD卡:EXTERNAL_STORAGE = 1;
  60. * **/
  61. public static String getStorageInfo(Context context, int type) {
  62. String path = getStoragePath(context, type);
  63. /**
  64. * 无外置SD 卡判断
  65. * **/
  66. if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) {
  67. return "无外置SD卡";
  68. }
  69. File file = new File(path);
  70. StatFs statFs = new StatFs(file.getPath());
  71. String stotageInfo;
  72. long blockCount = statFs.getBlockCountLong();
  73. long bloackSize = statFs.getBlockSizeLong();
  74. long totalSpace = bloackSize * blockCount;
  75. long availableBlocks = statFs.getAvailableBlocksLong();
  76. long availableSpace = availableBlocks * bloackSize;
  77. stotageInfo = "可用/总共:"
  78. + Formatter.formatFileSize(context, availableSpace) + "/"
  79. + Formatter.formatFileSize(context, totalSpace);
  80. return stotageInfo;
  81. }
  82. /**
  83. * 使用反射方法 获取手机存储路径
  84. *
  85. * **/
  86. public static String getStoragePath(Context context, int type) {
  87. StorageManager sm = (StorageManager) context
  88. .getSystemService(Context.STORAGE_SERVICE);
  89. try {
  90. Method getPathsMethod = sm.getClass().getMethod("getVolumePaths",
  91. null);
  92. String[] path = (String[]) getPathsMethod.invoke(sm, null);
  93. switch (type) {
  94. case INTERNAL_STORAGE:
  95. return path[type];
  96. case EXTERNAL_STORAGE:
  97. if (path.length > 1) {
  98. return path[type];
  99. } else {
  100. return null;
  101. }
  102. default:
  103. break;
  104. }
  105. } catch (Exception e) {
  106. e.printStackTrace();
  107. }
  108. return null;
  109. }
  110. /**
  111. * 获取 手机 RAM 信息 方法 一
  112. * */
  113. public static String getTotalRAM(Context context) {
  114. long size = 0;
  115. ActivityManager activityManager = (ActivityManager) context
  116. .getSystemService(context.ACTIVITY_SERVICE);
  117. MemoryInfo outInfo = new MemoryInfo();
  118. activityManager.getMemoryInfo(outInfo);
  119. size = outInfo.totalMem;
  120. return Formatter.formatFileSize(context, size);
  121. }
  122. /**
  123. * 手机 RAM 信息 方法 二
  124. * */
  125. public static String getTotalRAMOther(Context context) {
  126. String path = "/proc/meminfo";
  127. String firstLine = null;
  128. int totalRam = 0;
  129. try {
  130. FileReader fileReader = new FileReader(path);
  131. BufferedReader br = new BufferedReader(fileReader, 8192);
  132. firstLine = br.readLine().split("\\s+")[1];
  133. br.close();
  134. } catch (Exception e) {
  135. e.printStackTrace();
  136. }
  137. if (firstLine != null) {
  138. totalRam = (int) Math.ceil((new Float(Float.valueOf(firstLine)
  139. / (1024 * 1024)).doubleValue()));
  140. long totalBytes = 0;
  141. }
  142. return Formatter.formatFileSize(context, totalRam);
  143. }
  144. /**
  145. * 获取 手机 可用 RAM
  146. * */
  147. public static String getAvailableRAM(Context context) {
  148. long size = 0;
  149. ActivityManager activityManager = (ActivityManager) context
  150. .getSystemService(context.ACTIVITY_SERVICE);
  151. MemoryInfo outInfo = new MemoryInfo();
  152. activityManager.getMemoryInfo(outInfo);
  153. size = outInfo.availMem;
  154. return Formatter.formatFileSize(context, size);
  155. }
  156. /**
  157. * 获取手机内部存储空间
  158. *
  159. * @param context
  160. * @return 以M,G为单位的容量
  161. */
  162. public static String getTotalInternalMemorySize(Context context) {
  163. File file = Environment.getDataDirectory();
  164. StatFs statFs = new StatFs(file.getPath());
  165. long blockSizeLong = statFs.getBlockSizeLong();
  166. long blockCountLong = statFs.getBlockCountLong();
  167. long size = blockCountLong * blockSizeLong;
  168. return Formatter.formatFileSize(context, size);
  169. }
  170. /**
  171. * 获取手机内部可用存储空间
  172. *
  173. * @param context
  174. * @return 以M,G为单位的容量
  175. */
  176. public static String getAvailableInternalMemorySize(Context context) {
  177. File file = Environment.getDataDirectory();
  178. StatFs statFs = new StatFs(file.getPath());
  179. long availableBlocksLong = statFs.getAvailableBlocksLong();
  180. long blockSizeLong = statFs.getBlockSizeLong();
  181. return Formatter.formatFileSize(context, availableBlocksLong
  182. * blockSizeLong);
  183. }
  184. /**
  185. * 获取手机外部存储空间
  186. *
  187. * @param context
  188. * @return 以M,G为单位的容量
  189. */
  190. public static String getTotalExternalMemorySize(Context context) {
  191. File file = Environment.getExternalStorageDirectory();
  192. StatFs statFs = new StatFs(file.getPath());
  193. long blockSizeLong = statFs.getBlockSizeLong();
  194. long blockCountLong = statFs.getBlockCountLong();
  195. return Formatter
  196. .formatFileSize(context, blockCountLong * blockSizeLong);
  197. }
  198. /**
  199. * 获取手机外部可用存储空间
  200. *
  201. * @param context
  202. * @return 以M,G为单位的容量
  203. */
  204. public static String getAvailableExternalMemorySize(Context context) {
  205. File file = Environment.getExternalStorageDirectory();
  206. StatFs statFs = new StatFs(file.getPath());
  207. long availableBlocksLong = statFs.getAvailableBlocksLong();
  208. long blockSizeLong = statFs.getBlockSizeLong();
  209. return Formatter.formatFileSize(context, availableBlocksLong
  210. * blockSizeLong);
  211. }
  212. /**
  213. *
  214. * SD 卡信息
  215. * */
  216. public static String getSDCardInfo() {
  217. SDCardInfo sd = new SDCardInfo();
  218. if (!isSDCardMount())
  219. return "SD card 未挂载!";
  220. sd.isExist = true;
  221. StatFs sf = new StatFs(Environment.getExternalStorageDirectory()
  222. .getPath());
  223. sd.totalBlocks = sf.getBlockCountLong();
  224. sd.blockByteSize = sf.getBlockSizeLong();
  225. sd.availableBlocks = sf.getAvailableBlocksLong();
  226. sd.availableBytes = sf.getAvailableBytes();
  227. sd.freeBlocks = sf.getFreeBlocksLong();
  228. sd.freeBytes = sf.getFreeBytes();
  229. sd.totalBytes = sf.getTotalBytes();
  230. return sd.toString();
  231. }
  232. public static class SDCardInfo {
  233. boolean isExist;
  234. long totalBlocks;
  235. long freeBlocks;
  236. long availableBlocks;
  237. long blockByteSize;
  238. long totalBytes;
  239. long freeBytes;
  240. long availableBytes;
  241. @Override
  242. public String toString() {
  243. return "isExist=" + isExist + "\ntotalBlocks=" + totalBlocks
  244. + "\nfreeBlocks=" + freeBlocks + "\navailableBlocks="
  245. + availableBlocks + "\nblockByteSize=" + blockByteSize
  246. + "\ntotalBytes=" + totalBytes + "\nfreeBytes=" + freeBytes
  247. + "\navailableBytes=" + availableBytes;
  248. }
  249. }
  250. // add start by wangjie for SDCard TotalStorage
  251. public static String getSDCardTotalStorage(long totalByte) {
  252. double byte2GB = totalByte / 1024.00 / 1024.00 / 1024.00;
  253. double totalStorage;
  254. if (byte2GB > 1) {
  255. totalStorage = Math.ceil(byte2GB);
  256. if (totalStorage > 1 && totalStorage < 3) {
  257. return 2.0 + "GB";
  258. } else if (totalStorage > 2 && totalStorage < 5) {
  259. return 4.0 + "GB";
  260. } else if (totalStorage >= 5 && totalStorage < 10) {
  261. return 8.0 + "GB";
  262. } else if (totalStorage >= 10 && totalStorage < 18) {
  263. return 16.0 + "GB";
  264. } else if (totalStorage >= 18 && totalStorage < 34) {
  265. return 32.0 + "GB";
  266. } else if (totalStorage >= 34 && totalStorage < 50) {
  267. return 48.0 + "GB";
  268. } else if (totalStorage >= 50 && totalStorage < 66) {
  269. return 64.0 + "GB";
  270. } else if (totalStorage >= 66 && totalStorage < 130) {
  271. return 128.0 + "GB";
  272. }
  273. } else {
  274. // below 1G return get values
  275. totalStorage = totalByte / 1024.00 / 1024.00;
  276. if (totalStorage >= 515 && totalStorage < 1024) {
  277. return 1 + "GB";
  278. } else if (totalStorage >= 260 && totalStorage < 515) {
  279. return 512 + "MB";
  280. } else if (totalStorage >= 130 && totalStorage < 260) {
  281. return 256 + "MB";
  282. } else if (totalStorage > 70 && totalStorage < 130) {
  283. return 128 + "MB";
  284. } else if (totalStorage > 50 && totalStorage < 70) {
  285. return 64 + "MB";
  286. }
  287. }
  288. return totalStorage + "GB";
  289. }
  290. // add end by wangjie for SDCard TotalStorage
  291. }

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除。同时感谢您的阅读,期待您的关注。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/242143
推荐阅读
相关标签
  

闽ICP备14008679号