Android 手机信息获取详解


极力推荐文章:欢迎收藏
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 信息方法如下:

	/**
	 * 获取设备宽度(px)
	 * 
	 */
	public static int getDeviceWidth(Context context) {
		return context.getResources().getDisplayMetrics().widthPixels;
	}

	/**
	 * 获取设备高度(px)
	 */
	public static int getDeviceHeight(Context context) {
		return context.getResources().getDisplayMetrics().heightPixels;
	}

	/**
	 * 获取设备的唯一标识, 需要 “android.permission.READ_Phone_STATE”权限
	 */
	public static String getIMEI(Context context) {
		TelephonyManager tm = (TelephonyManager) context
				.getSystemService(Context.TELEPHONY_SERVICE);
		String deviceId = tm.getDeviceId();
		if (deviceId == null) {
			return "UnKnown";
		} else {
			return deviceId;
		}
	}

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

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

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

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

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

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

	/**
	 * 获取厂商名
	 * **/
	public static String getDeviceManufacturer() {
		return android.os.Build.MANUFACTURER;
	}

	/**
	 * 获取产品名
	 * **/
	public static String getDeviceProduct() {
		return android.os.Build.PRODUCT;
	}

	/**
	 * 获取手机品牌
	 */
	public static String getDeviceBrand() {
		return android.os.Build.BRAND;
	}

	/**
	 * 获取手机型号
	 */
	public static String getDeviceModel() {
		return android.os.Build.MODEL;
	}

	/**
	 * 获取手机主板名
	 */
	public static String getDeviceBoard() {
		return android.os.Build.BOARD;
	}

	/**
	 * 设备名
	 * **/
	public static String getDeviceDevice() {
		return android.os.Build.DEVICE;
	}

	/**
	 * 
	 * 
	 * fingerprit 信息
	 * **/
	public static String getDeviceFubgerprint() {
		return android.os.Build.FINGERPRINT;
	}

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

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

	/**
	 * 硬件名
	 * 
	 * **/
	public static String getDeviceHardware() {
		return android.os.Build.HARDWARE;
	}

	/**
	 * 主机
	 * 
	 * **/
	public static String getDeviceHost() {
		return android.os.Build.HOST;
	}

	/**
	 * 
	 * 显示ID
	 * **/
	public static String getDeviceDisplay() {
		return android.os.Build.DISPLAY;
	}

	/**
	 * ID
	 * 
	 * **/
	public static String getDeviceId() {
		return android.os.Build.ID;
	}

	/**
	 * 获取手机用户名
	 * 
	 * **/
	public static String getDeviceUser() {
		return android.os.Build.USER;
	}

	/**
	 * 获取手机 硬件序列号
	 * **/
	public static String getDeviceSerial() {
		return android.os.Build.SERIAL;
	}

	/**
	 * 获取手机Android 系统SDK
	 * 
	 * @return
	 */
	public static int getDeviceSDK() {
		return android.os.Build.VERSION.SDK_INT;
	}

	/**
	 * 获取手机Android 版本
	 * 
	 * @return
	 */
	public static String getDeviceAndroidVersion() {
		return android.os.Build.VERSION.RELEASE;
	}

	/**
	 * 获取当前手机系统语言。
	 */
	public static String getDeviceDefaultLanguage() {
		return Locale.getDefault().getLanguage();
	}

	/**
	 * 获取当前系统上的语言列表(Locale列表)
	 */
	public static String getDeviceSupportLanguage() {
		Log.e("wangjie", "Local:" + Locale.GERMAN);
		Log.e("wangjie", "Local:" + Locale.ENGLISH);
		Log.e("wangjie", "Local:" + Locale.US);
		Log.e("wangjie", "Local:" + Locale.CHINESE);
		Log.e("wangjie", "Local:" + Locale.TAIWAN);
		Log.e("wangjie", "Local:" + Locale.FRANCE);
		Log.e("wangjie", "Local:" + Locale.FRENCH);
		Log.e("wangjie", "Local:" + Locale.GERMANY);
		Log.e("wangjie", "Local:" + Locale.ITALIAN);
		Log.e("wangjie", "Local:" + Locale.JAPAN);
		Log.e("wangjie", "Local:" + Locale.JAPANESE);
		return Locale.getAvailableLocales().toString();
	}

六、 获取 SD 卡存储信息

SD卡信息

1.判断SD是否挂载方法

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

	/**
	 * 判断SD是否挂载
	 */
	public static boolean isSDCardMount() {
		return Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED);
	}

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

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

/**
	 * 获取手机存储 ROM 信息
	 * 
	 * type: 用于区分内置存储于外置存储的方法
	 * 
	 * 内置SD卡 :INTERNAL_STORAGE = 0;
	 * 
	 * 外置SD卡: EXTERNAL_STORAGE = 1;
	 * **/
	public static String getStorageInfo(Context context, int type) {

		String path = getStoragePath(context, type);
		/**
		 * 无外置SD 卡判断
		 * **/
		if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) {
			return "无外置SD卡";
		}

		File file = new File(path);
		StatFs statFs = new StatFs(file.getPath());
		String stotageInfo;

		long blockCount = statFs.getBlockCountLong();
		long bloackSize = statFs.getBlockSizeLong();
		long totalSpace = bloackSize * blockCount;

		long availableBlocks = statFs.getAvailableBlocksLong();
		long availableSpace = availableBlocks * bloackSize;

		stotageInfo = "可用/总共:"
				+ Formatter.formatFileSize(context, availableSpace) + "/"
				+ Formatter.formatFileSize(context, totalSpace);

		return stotageInfo;

	}

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

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

/**
	 * 使用反射方法 获取手机存储路径
	 * 
	 * **/
	public static String getStoragePath(Context context, int type) {

		StorageManager sm = (StorageManager) context
				.getSystemService(Context.STORAGE_SERVICE);
		try {
			Method getPathsMethod = sm.getClass().getMethod("getVolumePaths",
					null);
			String[] path = (String[]) getPathsMethod.invoke(sm, null);

			switch (type) {
			case INTERNAL_STORAGE:
				return path[type];
			case EXTERNAL_STORAGE:
				if (path.length > 1) {
					return path[type];
				} else {
					return null;
				}

			default:
				break;
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 获取 手机 RAM 信息 方法 一
	 * */
	public static String getTotalRAM(Context context) {
		long size = 0;
		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(context.ACTIVITY_SERVICE);
		MemoryInfo outInfo = new MemoryInfo();
		activityManager.getMemoryInfo(outInfo);
		size = outInfo.totalMem;

		return Formatter.formatFileSize(context, size);
	}

	/**
	 * 手机 RAM 信息 方法 二
	 * */
	public static String getTotalRAMOther(Context context) {
		String path = "/proc/meminfo";
		String firstLine = null;
		int totalRam = 0;
		try {
			FileReader fileReader = new FileReader(path);
			BufferedReader br = new BufferedReader(fileReader, 8192);
			firstLine = br.readLine().split("\s+")[1];
			br.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (firstLine != null) {

			totalRam = (int) Math.ceil((new Float(Float.valueOf(firstLine)
					/ (1024 * 1024)).doubleValue()));

			long totalBytes = 0;

		}

		return Formatter.formatFileSize(context, totalRam);
	}

	/**
	 * 获取 手机 可用 RAM
	 * */
	public static String getAvailableRAM(Context context) {
		long size = 0;
		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(context.ACTIVITY_SERVICE);
		MemoryInfo outInfo = new MemoryInfo();
		activityManager.getMemoryInfo(outInfo);
		size = outInfo.availMem;

		return Formatter.formatFileSize(context, size);
	}

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

1.RAM:

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

2.ROM :

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

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

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

红米4 memory 信息 meminfo

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

	/**
	 * 获取 手机 RAM 信息
	 * */
	public static String getRAMInfo(Context context) {
		long totalSize = 0;
		long availableSize = 0;

		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(context.ACTIVITY_SERVICE);

		MemoryInfo memoryInfo = new MemoryInfo();
		activityManager.getMemoryInfo(memoryInfo);
		totalSize = memoryInfo.totalMem;
		availableSize = memoryInfo.availMem;

		return "可用/总共:" + Formatter.formatFileSize(context, availableSize)
				+ "/" + Formatter.formatFileSize(context, totalSize);
	}

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

/**
	 * 获取手机存储 ROM 信息
	 * 
	 * type: 用于区分内置存储于外置存储的方法
	 * 
	 * 内置SD卡 :INTERNAL_STORAGE = 0;
	 * 
	 * 外置SD卡: EXTERNAL_STORAGE = 1;
	 * **/
	public static String getStorageInfo(Context context, int type) {

		String path = getStoragePath(context, type);
		/**
		 * 无外置SD 卡判断
		 * **/
		if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) {
			return "无外置SD卡";
		}

		File file = new File(path);
		StatFs statFs = new StatFs(file.getPath());
		String stotageInfo;

		long blockCount = statFs.getBlockCountLong();
		long bloackSize = statFs.getBlockSizeLong();
		long totalSpace = bloackSize * blockCount;

		long availableBlocks = statFs.getAvailableBlocksLong();
		long availableSpace = availableBlocks * bloackSize;

		stotageInfo = "可用/总共:"
				+ Formatter.formatFileSize(context, availableSpace) + "/"
				+ Formatter.formatFileSize(context, totalSpace);

		return stotageInfo;

	}

八、DeviceInfoUtils 封装类

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

package com.programandroid.Utils;

import java.util.Locale;

import android.R.string;
import android.content.Context;
import android.telephony.TelephonyManager;
import android.util.Log;

/*
 * DeviceInfoUtils.java
 *
 *  Created on: 2017-11-16
 *      Author: wangjie
 * 
 *  Welcome attention to weixin public number get more info
 *
 *  WeiXin Public Number : ProgramAndroid
 *  微信公众号 :程序员Android
 *
 */
public class DeviceInfoUtils {

	/**
	 * 获取设备宽度(px)
	 * 
	 */
	public static int getDeviceWidth(Context context) {
		return context.getResources().getDisplayMetrics().widthPixels;
	}

	/**
	 * 获取设备高度(px)
	 */
	public static int getDeviceHeight(Context context) {
		return context.getResources().getDisplayMetrics().heightPixels;
	}

	/**
	 * 获取设备的唯一标识, 需要 “android.permission.READ_Phone_STATE”权限
	 */
	public static String getIMEI(Context context) {
		TelephonyManager tm = (TelephonyManager) context
				.getSystemService(Context.TELEPHONY_SERVICE);
		String deviceId = tm.getDeviceId();
		if (deviceId == null) {
			return "UnKnown";
		} else {
			return deviceId;
		}
	}

	/**
	 * 获取厂商名
	 * **/
	public static String getDeviceManufacturer() {
		return android.os.Build.MANUFACTURER;
	}

	/**
	 * 获取产品名
	 * **/
	public static String getDeviceProduct() {
		return android.os.Build.PRODUCT;
	}

	/**
	 * 获取手机品牌
	 */
	public static String getDeviceBrand() {
		return android.os.Build.BRAND;
	}

	/**
	 * 获取手机型号
	 */
	public static String getDeviceModel() {
		return android.os.Build.MODEL;
	}

	/**
	 * 获取手机主板名
	 */
	public static String getDeviceBoard() {
		return android.os.Build.BOARD;
	}

	/**
	 * 设备名
	 * **/
	public static String getDeviceDevice() {
		return android.os.Build.DEVICE;
	}

	/**
	 * 
	 * 
	 * fingerprit 信息
	 * **/
	public static String getDeviceFubgerprint() {
		return android.os.Build.FINGERPRINT;
	}

	/**
	 * 硬件名
	 * 
	 * **/
	public static String getDeviceHardware() {
		return android.os.Build.HARDWARE;
	}

	/**
	 * 主机
	 * 
	 * **/
	public static String getDeviceHost() {
		return android.os.Build.HOST;
	}

	/**
	 * 
	 * 显示ID
	 * **/
	public static String getDeviceDisplay() {
		return android.os.Build.DISPLAY;
	}

	/**
	 * ID
	 * 
	 * **/
	public static String getDeviceId() {
		return android.os.Build.ID;
	}

	/**
	 * 获取手机用户名
	 * 
	 * **/
	public static String getDeviceUser() {
		return android.os.Build.USER;
	}

	/**
	 * 获取手机 硬件序列号
	 * **/
	public static String getDeviceSerial() {
		return android.os.Build.SERIAL;
	}

	/**
	 * 获取手机Android 系统SDK
	 * 
	 * @return
	 */
	public static int getDeviceSDK() {
		return android.os.Build.VERSION.SDK_INT;
	}

	/**
	 * 获取手机Android 版本
	 * 
	 * @return
	 */
	public static String getDeviceAndroidVersion() {
		return android.os.Build.VERSION.RELEASE;
	}

	/**
	 * 获取当前手机系统语言。
	 */
	public static String getDeviceDefaultLanguage() {
		return Locale.getDefault().getLanguage();
	}

	/**
	 * 获取当前系统上的语言列表(Locale列表)
	 */
	public static String getDeviceSupportLanguage() {
		Log.e("wangjie", "Local:" + Locale.GERMAN);
		Log.e("wangjie", "Local:" + Locale.ENGLISH);
		Log.e("wangjie", "Local:" + Locale.US);
		Log.e("wangjie", "Local:" + Locale.CHINESE);
		Log.e("wangjie", "Local:" + Locale.TAIWAN);
		Log.e("wangjie", "Local:" + Locale.FRANCE);
		Log.e("wangjie", "Local:" + Locale.FRENCH);
		Log.e("wangjie", "Local:" + Locale.GERMANY);
		Log.e("wangjie", "Local:" + Locale.ITALIAN);
		Log.e("wangjie", "Local:" + Locale.JAPAN);
		Log.e("wangjie", "Local:" + Locale.JAPANESE);
		return Locale.getAvailableLocales().toString();
	}

	public static String getDeviceAllInfo(Context context) {

		return "

1. IMEI:
		" + getIMEI(context)

		+ "

2. 设备宽度:
		" + getDeviceWidth(context)

		+ "

3. 设备高度:
		" + getDeviceHeight(context)

		+ "

4. 是否有内置SD卡:
		" + SDCardUtils.isSDCardMount()

		+ "

5. RAM 信息:
		" + SDCardUtils.getRAMInfo(context)

		+ "

6. 内部存储信息
		" + SDCardUtils.getStorageInfo(context, 0)

		+ "

7. SD卡 信息:
		" + SDCardUtils.getStorageInfo(context, 1)

		+ "

8. 是否联网:
		" + Utils.isNetworkConnected(context)

		+ "

9. 网络类型:
		" + Utils.GetNetworkType(context)

		+ "

10. 系统默认语言:
		" + getDeviceDefaultLanguage()

		+ "

11. 硬件序列号(设备名):
		" + android.os.Build.SERIAL

		+ "

12. 手机型号:
		" + android.os.Build.MODEL

		+ "

13. 生产厂商:
		" + android.os.Build.MANUFACTURER

		+ "

14. 手机Fingerprint标识:
		" + android.os.Build.FINGERPRINT

		+ "

15. Android 版本:
		" + android.os.Build.VERSION.RELEASE

		+ "

16. Android SDK版本:
		" + android.os.Build.VERSION.SDK_INT

		+ "

17. 安全patch 时间:
		" + android.os.Build.VERSION.SECURITY_PATCH

		+ "

18. 发布时间:
		" + Utils.Utc2Local(android.os.Build.TIME)

		+ "

19. 版本类型:
		" + android.os.Build.TYPE

		+ "

20. 用户名:
		" + android.os.Build.USER

		+ "

21. 产品名:
		" + android.os.Build.PRODUCT

		+ "

22. ID:
		" + android.os.Build.ID

		+ "

23. 显示ID:
		" + android.os.Build.DISPLAY

		+ "

24. 硬件名:
		" + android.os.Build.HARDWARE

		+ "

25. 产品名:
		" + android.os.Build.DEVICE

		+ "

26. Bootloader:
		" + android.os.Build.BOOTLOADER

		+ "

27. 主板名:
		" + android.os.Build.BOARD

		+ "

28. CodeName:
		" + android.os.Build.VERSION.CODENAME
				+ "

29. 语言支持:
		" + getDeviceSupportLanguage();

	}
}

九、SDCardUtils 封装类

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

package com.programandroid.Utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.lang.reflect.Method;

import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
import android.os.StatFs;
import android.os.storage.StorageManager;
import android.text.TextUtils;
import android.text.format.Formatter;

/*
 * SDCardUtils.java
 *
 *  Created on: 2017-11-22
 *      Author: wangjie
 * 
 *  Welcome attention to weixin public number get more info
 *
 *  WeiXin Public Number : ProgramAndroid
 *  微信公众号 :程序员Android
 *
 */
public class SDCardUtils {

	private static final int INTERNAL_STORAGE = 0;
	private static final int EXTERNAL_STORAGE = 1;

	/**
	 * 获取 手机 RAM 信息
	 * */
	public static String getRAMInfo(Context context) {
		long totalSize = 0;
		long availableSize = 0;

		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(context.ACTIVITY_SERVICE);

		MemoryInfo memoryInfo = new MemoryInfo();
		activityManager.getMemoryInfo(memoryInfo);
		totalSize = memoryInfo.totalMem;
		availableSize = memoryInfo.availMem;

		return "可用/总共:" + Formatter.formatFileSize(context, availableSize)
				+ "/" + Formatter.formatFileSize(context, totalSize);
	}

	/**
	 * 判断SD是否挂载
	 */
	public static boolean isSDCardMount() {
		return Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED);
	}

	/**
	 * 获取手机存储 ROM 信息
	 * 
	 * type: 用于区分内置存储于外置存储的方法
	 * 
	 * 内置SD卡 :INTERNAL_STORAGE = 0;
	 * 
	 * 外置SD卡: EXTERNAL_STORAGE = 1;
	 * **/
	public static String getStorageInfo(Context context, int type) {

		String path = getStoragePath(context, type);
		/**
		 * 无外置SD 卡判断
		 * **/
		if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) {
			return "无外置SD卡";
		}

		File file = new File(path);
		StatFs statFs = new StatFs(file.getPath());
		String stotageInfo;

		long blockCount = statFs.getBlockCountLong();
		long bloackSize = statFs.getBlockSizeLong();
		long totalSpace = bloackSize * blockCount;

		long availableBlocks = statFs.getAvailableBlocksLong();
		long availableSpace = availableBlocks * bloackSize;

		stotageInfo = "可用/总共:"
				+ Formatter.formatFileSize(context, availableSpace) + "/"
				+ Formatter.formatFileSize(context, totalSpace);

		return stotageInfo;

	}

	/**
	 * 使用反射方法 获取手机存储路径
	 * 
	 * **/
	public static String getStoragePath(Context context, int type) {

		StorageManager sm = (StorageManager) context
				.getSystemService(Context.STORAGE_SERVICE);
		try {
			Method getPathsMethod = sm.getClass().getMethod("getVolumePaths",
					null);
			String[] path = (String[]) getPathsMethod.invoke(sm, null);

			switch (type) {
			case INTERNAL_STORAGE:
				return path[type];
			case EXTERNAL_STORAGE:
				if (path.length > 1) {
					return path[type];
				} else {
					return null;
				}

			default:
				break;
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 获取 手机 RAM 信息 方法 一
	 * */
	public static String getTotalRAM(Context context) {
		long size = 0;
		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(context.ACTIVITY_SERVICE);
		MemoryInfo outInfo = new MemoryInfo();
		activityManager.getMemoryInfo(outInfo);
		size = outInfo.totalMem;

		return Formatter.formatFileSize(context, size);
	}

	/**
	 * 手机 RAM 信息 方法 二
	 * */
	public static String getTotalRAMOther(Context context) {
		String path = "/proc/meminfo";
		String firstLine = null;
		int totalRam = 0;
		try {
			FileReader fileReader = new FileReader(path);
			BufferedReader br = new BufferedReader(fileReader, 8192);
			firstLine = br.readLine().split("\s+")[1];
			br.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (firstLine != null) {

			totalRam = (int) Math.ceil((new Float(Float.valueOf(firstLine)
					/ (1024 * 1024)).doubleValue()));

			long totalBytes = 0;

		}

		return Formatter.formatFileSize(context, totalRam);
	}

	/**
	 * 获取 手机 可用 RAM
	 * */
	public static String getAvailableRAM(Context context) {
		long size = 0;
		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(context.ACTIVITY_SERVICE);
		MemoryInfo outInfo = new MemoryInfo();
		activityManager.getMemoryInfo(outInfo);
		size = outInfo.availMem;

		return Formatter.formatFileSize(context, size);
	}

	/**
	 * 获取手机内部存储空间
	 * 
	 * @param context
	 * @return 以M,G为单位的容量
	 */
	public static String getTotalInternalMemorySize(Context context) {
		File file = Environment.getDataDirectory();
		StatFs statFs = new StatFs(file.getPath());
		long blockSizeLong = statFs.getBlockSizeLong();
		long blockCountLong = statFs.getBlockCountLong();
		long size = blockCountLong * blockSizeLong;
		return Formatter.formatFileSize(context, size);
	}

	/**
	 * 获取手机内部可用存储空间
	 * 
	 * @param context
	 * @return 以M,G为单位的容量
	 */
	public static String getAvailableInternalMemorySize(Context context) {
		File file = Environment.getDataDirectory();
		StatFs statFs = new StatFs(file.getPath());
		long availableBlocksLong = statFs.getAvailableBlocksLong();
		long blockSizeLong = statFs.getBlockSizeLong();
		return Formatter.formatFileSize(context, availableBlocksLong
				* blockSizeLong);
	}

	/**
	 * 获取手机外部存储空间
	 * 
	 * @param context
	 * @return 以M,G为单位的容量
	 */
	public static String getTotalExternalMemorySize(Context context) {
		File file = Environment.getExternalStorageDirectory();
		StatFs statFs = new StatFs(file.getPath());
		long blockSizeLong = statFs.getBlockSizeLong();
		long blockCountLong = statFs.getBlockCountLong();
		return Formatter
				.formatFileSize(context, blockCountLong * blockSizeLong);
	}

	/**
	 * 获取手机外部可用存储空间
	 * 
	 * @param context
	 * @return 以M,G为单位的容量
	 */
	public static String getAvailableExternalMemorySize(Context context) {
		File file = Environment.getExternalStorageDirectory();
		StatFs statFs = new StatFs(file.getPath());
		long availableBlocksLong = statFs.getAvailableBlocksLong();
		long blockSizeLong = statFs.getBlockSizeLong();
		return Formatter.formatFileSize(context, availableBlocksLong
				* blockSizeLong);
	}

	/**
	 * 
	 * SD 卡信息
	 * */

	public static String getSDCardInfo() {

		SDCardInfo sd = new SDCardInfo();
		if (!isSDCardMount())
			return "SD card 未挂载!";

		sd.isExist = true;
		StatFs sf = new StatFs(Environment.getExternalStorageDirectory()
				.getPath());

		sd.totalBlocks = sf.getBlockCountLong();
		sd.blockByteSize = sf.getBlockSizeLong();
		sd.availableBlocks = sf.getAvailableBlocksLong();
		sd.availableBytes = sf.getAvailableBytes();
		sd.freeBlocks = sf.getFreeBlocksLong();
		sd.freeBytes = sf.getFreeBytes();
		sd.totalBytes = sf.getTotalBytes();
		return sd.toString();
	}

	public static class SDCardInfo {
		boolean isExist;
		long totalBlocks;
		long freeBlocks;
		long availableBlocks;
		long blockByteSize;
		long totalBytes;
		long freeBytes;
		long availableBytes;

		@Override
		public String toString() {
			return "isExist=" + isExist + "
totalBlocks=" + totalBlocks
					+ "
freeBlocks=" + freeBlocks + "
availableBlocks="
					+ availableBlocks + "
blockByteSize=" + blockByteSize
					+ "
totalBytes=" + totalBytes + "
freeBytes=" + freeBytes
					+ "
availableBytes=" + availableBytes;
		}
	}

	// add start by wangjie for SDCard TotalStorage
	public static String getSDCardTotalStorage(long totalByte) {

		double byte2GB = totalByte / 1024.00 / 1024.00 / 1024.00;
		double totalStorage;
		if (byte2GB > 1) {
			totalStorage = Math.ceil(byte2GB);
			if (totalStorage > 1 && totalStorage < 3) {
				return 2.0 + "GB";
			} else if (totalStorage > 2 && totalStorage < 5) {
				return 4.0 + "GB";
			} else if (totalStorage >= 5 && totalStorage < 10) {
				return 8.0 + "GB";
			} else if (totalStorage >= 10 && totalStorage < 18) {
				return 16.0 + "GB";
			} else if (totalStorage >= 18 && totalStorage < 34) {
				return 32.0 + "GB";
			} else if (totalStorage >= 34 && totalStorage < 50) {
				return 48.0 + "GB";
			} else if (totalStorage >= 50 && totalStorage < 66) {
				return 64.0 + "GB";
			} else if (totalStorage >= 66 && totalStorage < 130) {
				return 128.0 + "GB";
			}
		} else {
			// below 1G return get values
			totalStorage = totalByte / 1024.00 / 1024.00;

			if (totalStorage >= 515 && totalStorage < 1024) {
				return 1 + "GB";
			} else if (totalStorage >= 260 && totalStorage < 515) {
				return 512 + "MB";
			} else if (totalStorage >= 130 && totalStorage < 260) {
				return 256 + "MB";
			} else if (totalStorage > 70 && totalStorage < 130) {
				return 128 + "MB";
			} else if (totalStorage > 50 && totalStorage < 70) {
				return 64 + "MB";
			}
		}

		return totalStorage + "GB";
	}
	// add end by wangjie for SDCard TotalStorage

}

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

原文地址:https://www.cnblogs.com/wangjie1990/p/11327665.html