zoukankan      html  css  js  c++  java
  • 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
    
    }
    
    

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

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

  • 相关阅读:
    SQLServer学习笔记系列1
    结束回忆的2014,带着精彩奔向2015!
    sql重置自增长
    回首一年的骚动岁月
    IIS7.5上的REST服务的Put,Delete操作发生HTTP Error 405.0
    Javascript学习笔记1
    C#基础回顾(三)—索引器、委托、反射
    C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
    C#基础回顾(一)—C#访问修饰符
    SQL连接
  • 原文地址:https://www.cnblogs.com/wangjie1990/p/11327665.html
Copyright © 2011-2022 走看看