在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SDCardUtils封裝類應(yīng)用:設(shè)備信息獲取實現(xiàn)方法

哆啦安全 ? 來源:哆啦安全 ? 2023-11-13 09:40 ? 次閱讀

下面將講解以上信息的獲取方法。

一、 獲取手機基本信息(廠商、型號等參數(shù))

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

7efa26dc-81c1-11ee-939d-92fbcf53809c.jpg

小米手機設(shè)備信息圖

那么如何獲取這些設(shè)備信息呢?Android中 通常通過android.os.Build類方法可以獲取更多手機設(shè)備信息。

二、 設(shè)備信息獲取實現(xiàn)圖

7f047ea2-81c1-11ee-939d-92fbcf53809c.jpg

獲取手機IMEI、寬、高、是否有SD卡,RAM、ROM、SD卡、是否聯(lián)網(wǎng)、網(wǎng)絡(luò)類型

7f12649a-81c1-11ee-939d-92fbcf53809c.jpg

默認語言,設(shè)備名,型號、廠商、Fingerprint、Android 版本、SDK版本、Google 安全patch、發(fā)布時間、版本類型、用戶名

7f1a6ef6-81c1-11ee-939d-92fbcf53809c.jpg

產(chǎn)品名、ID、產(chǎn)品名、主板名

三、 獲取手機設(shè)備 寬、高、IMEI 信息方法

獲取手機寬、高、IMEI信息方法如下:

    /**
     * 獲取設(shè)備寬度(px)
     * 
     */
    public static int getDeviceWidth(Context context) {
        return context.getResources().getDisplayMetrics().widthPixels;
    }

    /**
     * 獲取設(shè)備高度(px)
     */
    public static int getDeviceHeight(Context context) {
        return context.getResources().getDisplayMetrics().heightPixels;
    }

    /**
     * 獲取設(shè)備的唯一標(biāo)識, 需要 “android.permission.READ_Phone_STATE”權(quán)限
     */
    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需要獲取手機狀態(tài)權(quán)限

如果是Android 6.0之后的代碼請使用動態(tài)申請權(quán)限的方法申請權(quán)限,否認會報安全異常的錯誤SecurityException,進而導(dǎo)致運行報錯。

如需了解更多 系統(tǒng)安全權(quán)限的內(nèi)容,請看 之前寫的文章Android 系統(tǒng)權(quán)限使用詳解

四、 獲取手機廠商名、產(chǎn)品名、手機品牌、手機型號、主板名、設(shè)備名的方法

獲取手機廠商名、產(chǎn)品名、手機品牌、手機型號、主板名、設(shè)備名的方法如下:

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

    /**
     * 獲取產(chǎn)品名
     * **/
    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;
    }

    /**
     * 設(shè)備名
     * **/
    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 系統(tǒng)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;
    }

    /**
     * 獲取當(dāng)前手機系統(tǒng)語言。
     */
    public static String getDeviceDefaultLanguage() {
        return Locale.getDefault().getLanguage();
    }

    /**
     * 獲取當(dāng)前系統(tǒng)上的語言列表(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 卡存儲信息

7f2c510c-81c1-11ee-939d-92fbcf53809c.jpg

SD卡信息

1.判斷SD是否掛載方法

判斷SD是否掛載方法如下:

    /**
     * 判斷SD是否掛載
     */
    public static boolean isSDCardMount() {
        return Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED);
    }

2. 獲取SD 存儲信息的方法

獲取SD存儲信息的方法如下:

/**
     * 獲取手機存儲 ROM 信息
     * 
     * type: 用于區(qū)分內(nèi)置存儲于外置存儲的方法
     * 
     * 內(nèi)置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 (內(nèi)置存儲,外置存儲)存儲路徑的方法

獲取手機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:

運行時內(nèi)存,此大小直接決定手機運行的流暢度,相當(dāng)于電腦內(nèi)存。

2.ROM :

手機存儲(分內(nèi)置SD卡,外置SD卡),此大小直接決定著手機可以存儲資源的大小,相當(dāng)于電腦硬盤。

以紅米手機為例:
RAM= 1904716KB= 1.82G

7f33d99a-81c1-11ee-939d-92fbcf53809c.jpg

紅米4 手機 RAM、ROM存儲信息

7f409392-81c1-11ee-939d-92fbcf53809c.jpg

紅米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: 用于區(qū)分內(nèi)置存儲于外置存儲的方法
     * 
     * 內(nèi)置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 封裝類

為了方便查詢使用設(shè)備信息,小編已經(jīng)封裝成一個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 {

    /**
     * 獲取設(shè)備寬度(px)
     * 
     */
    public static int getDeviceWidth(Context context) {
        return context.getResources().getDisplayMetrics().widthPixels;
    }

    /**
     * 獲取設(shè)備高度(px)
     */
    public static int getDeviceHeight(Context context) {
        return context.getResources().getDisplayMetrics().heightPixels;
    }

    /**
     * 獲取設(shè)備的唯一標(biāo)識, 需要 “android.permission.READ_Phone_STATE”權(quán)限
     */
    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;
    }

    /**
     * 獲取產(chǎn)品名
     * **/
    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;
    }

    /**
     * 設(shè)備名
     * **/
    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 系統(tǒng)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;
    }

    /**
     * 獲取當(dāng)前手機系統(tǒng)語言。
     */
    public static String getDeviceDefaultLanguage() {
        return Locale.getDefault().getLanguage();
    }

    /**
     * 獲取當(dāng)前系統(tǒng)上的語言列表(Locale列表)
     */
    public static String getDeviceSupportLanguage() {
        Log.e("wange", "Local:" + Locale.GERMAN);
        Log.e("wange", "Local:" + Locale.ENGLISH);
        Log.e("wangj", "Local:" + Locale.US);
        Log.e("wangj", "Local:" + Locale.CHINESE);
        Log.e("wange", "Local:" + Locale.TAIWAN);
        Log.e("wange", "Local:" + Locale.FRANCE);
        Log.e("wange", "Local:" + Locale.FRENCH);
        Log.e("wange", "Local:" + Locale.GERMANY);
        Log.e("wange", "Local:" + Locale.ITALIAN);
        Log.e("wangj", "Local:" + Locale.JAPAN);
        Log.e("wange", "Local:" + Locale.JAPANESE);
        return Locale.getAvailableLocales().toString();
    }

    public static String getDeviceAllInfo(Context context) {

        return "
1. IMEI:
		" + getIMEI(context)
        + "
2. 設(shè)備寬度:
		" + getDeviceWidth(context)

        + "
3. 設(shè)備高度:
		" + getDeviceHeight(context)

        + "

4. 是否有內(nèi)置SD卡:
		" + SDCardUtils.isSDCardMount()

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

6. 內(nèi)部存儲信息
		" + SDCardUtils.getStorageInfo(context, 0)

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

        + "
8. 是否聯(lián)網(wǎng):
		" + Utils.isNetworkConnected(context)

        + "
9. 網(wǎng)絡(luò)類型:
		" + Utils.GetNetworkType(context)

        + "
10. 系統(tǒng)默認語言:
		" + getDeviceDefaultLanguage()

        + "

11. 硬件序列號(設(shè)備名):
		" + android.os.Build.SERIAL

        + "

12. 手機型號:
		" + android.os.Build.MODEL

        + "

13. 生產(chǎn)廠商:
		" + android.os.Build.MANUFACTURER

        + "

14. 手機Fingerprint標(biāo)識:
		" + 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. 發(fā)布時間:
		" + Utils.Utc2Local(android.os.Build.TIME)

        + "

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

        + "

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

        + "

21. 產(chǎn)品名:
		" + android.os.Build.PRODUCT

        + "

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

        + "

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

        + "

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

        + "

25. 產(chǎn)品名:
		" + 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 封裝類

為了方便查詢使用設(shè)備信息,小編已經(jīng)封裝成一個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: 用于區(qū)分內(nèi)置存儲于外置存儲的方法
     * 
     * 內(nèi)置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);
    }

    /**
     * 獲取手機內(nèi)部存儲空間
     * 
     * @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);
    }

    /**
     * 獲取手機內(nèi)部可用存儲空間
     * 
     * @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

}
編輯:黃飛
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3936

    瀏覽量

    127403
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    565

    瀏覽量

    63901
  • SDC
    SDC
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    15540
  • 小米手機
    +關(guān)注

    關(guān)注

    10

    文章

    6396

    瀏覽量

    75288

原文標(biāo)題:九、SDCardUtils 封裝類

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-位置服務(wù)獲取設(shè)備信息開發(fā)

    獲取設(shè)備的位置信息開發(fā) 場景概述 開發(fā)者可以調(diào)用HarmonyOS位置相關(guān)接口,獲取設(shè)備實時位置,或者最近的歷史位置。 對于位置敏感的應(yīng)用業(yè)
    發(fā)表于 06-14 14:46

    離散點采樣方法的MATLAB實現(xiàn)

    誰有離散點采樣方法的MATLAB實現(xiàn)的代碼 老師說是用于圖像處理上的基于目標(biāo)區(qū)域和基于目標(biāo)邊界兩方法的優(yōu)勢,用陰采樣圖獲取目標(biāo)圖像中目標(biāo)的
    發(fā)表于 03-16 00:16

    IC器件封裝的創(chuàng)建方法

      IC的器件與我們講的分立器件、邏輯器件不同,下面我們以TPS54531這個電源IC為例講解IC器件封裝創(chuàng)建的方法,查找TPS54531的Datasheet,它的封裝
    發(fā)表于 09-07 17:42

    基于HarmonyOS位置相關(guān)接口,獲取設(shè)備實時位置,調(diào)用HarmonyOS方向傳感器,獲取方向信息

    封裝了位置的基本信息。Slice:MainAbilitySlice應(yīng)用主頁面,位置獲取邏輯實現(xiàn)。utils:LogUtil主要作用打印日志
    發(fā)表于 08-25 14:34

    怎樣通過 ioctl 去獲取設(shè)備信息

    7.3.3 獲取設(shè)備信息通過 ioctl 獲取設(shè)備信息,ioctl 的參數(shù)如下:int ioct
    發(fā)表于 11-02 08:07

    介紹幾款專門獲取手機設(shè)備信息的App

    如何去查看手機的CPU架構(gòu)呢?有哪幾款專門獲取手機設(shè)備信息的App呢?
    發(fā)表于 11-08 06:42

    HarmonyOS如何實現(xiàn)設(shè)備之間的協(xié)同?

    。continueAbility 方法可以指定待遷移設(shè)備的 ID,該 ID 通過 DeviceUtils 工具獲取消息表示設(shè)備遷移時的狀態(tài)
    發(fā)表于 03-14 11:16

    通過.net DLL獲取USB設(shè)備信息

    本帖最后由 nan11403 于 2022-7-16 10:21 編輯 獲取USB設(shè)備信息,自己可以根據(jù)設(shè)備描述提取想要的設(shè)備VID\
    發(fā)表于 07-16 10:18

    CH341T讀取I2C設(shè)備時無法獲取正確的信息如何解決?

    我在使用CH341模塊,想實現(xiàn)獲取智能電池電量信息的功能,在使用CH341StreamI2C這個方法。智能電池的芯片是支持SMbus的Bq4050,
    發(fā)表于 07-18 09:29

    詳解IO設(shè)備管理之父調(diào)用子類方法的過程

    2.1 注冊接口rt_xxx_register設(shè)備驅(qū)動框架層的注冊接口干了2個活:(1)對上,把本類管理接口文件中實現(xiàn)方法傳遞給父方法
    發(fā)表于 10-09 15:18

    Labview中音頻的HID轉(zhuǎn)USB通訊需要怎么操作能獲取HID設(shè)備操作反饋值呢?

    該HID設(shè)備屬于音頻設(shè)備,另外屬于控制傳輸類型,請問需要采用哪個模塊來獲取該HID設(shè)備的通訊輸入反饋值呢(如按音量加鍵,需
    發(fā)表于 03-25 23:55

    網(wǎng)絡(luò)化條件下漏洞信息獲取及處理方法研究

    針對目前眾多計算機安全機構(gòu)所使用的計算機漏洞信息的現(xiàn)狀和存在問題,提出了開源漏洞庫批量下載、權(quán)威漏洞庫查詢、信息搜索等漏洞信息自動獲取方法,
    發(fā)表于 11-25 16:59 ?21次下載
    網(wǎng)絡(luò)化條件下漏洞<b class='flag-5'>信息</b>的<b class='flag-5'>獲取</b>及處理<b class='flag-5'>方法</b>研究

    一種嵌入式軟件版本信息獲取方法設(shè)計與實現(xiàn)

    為了定位嵌入式設(shè)備當(dāng)前運行軟件的版本,設(shè)計了一種獲取嵌入式軟件版本信息方法,首先設(shè)計電路實現(xiàn)按鍵檢測和LED驅(qū)動復(fù)用IO腳,當(dāng)IO腳為輸入
    發(fā)表于 08-07 19:00 ?0次下載

    使用C#實現(xiàn)Gettype和的typeof反射獲取實例的詳細說明

    本文檔的主要內(nèi)容詳細介紹的是使用C#實現(xiàn)Gettype和的typeof反射獲取實例的詳細說明
    發(fā)表于 07-20 08:00 ?0次下載
    使用C#<b class='flag-5'>實現(xiàn)</b>Gettype和<b class='flag-5'>類</b>的typeof反射<b class='flag-5'>獲取</b>實例的詳細說明

    獲取USB設(shè)備信息的方式介紹

    如果只是重寫nativeEvent是不夠的,并不能獲取設(shè)備信息,只能識別熱插拔狀態(tài)。要識別USB設(shè)備信息需要用到GUID,先定義
    發(fā)表于 07-29 16:52 ?4309次閱讀
    主站蜘蛛池模板: 日本人69xxxxx| 特黄特a级特别特级特毛片| 免费v片网站| 日韩毛片视频| 成 人 免费 网站| ak福利午夜在线观看| 一级特黄aa大片| 六月色婷婷| 人人做人人爽人人爱| 免费在线观看污视频| 女毛片| 人人福利| 9久久99久久久精品齐齐综合色圆| 免费看一级视频| 免费看欧美理论片在线| 九九re热| 国产三级在线免费观看| 国产精品片| 无遮挡高清一级毛片免费| 福利片免费一区二区三区| 91精品福利视频| 色久优优 欧美色久优优| 午夜小视频男女在线观看| 亚洲免费网站在线观看| 农村妇女野外一级毛片| 久热国产在线| 亚洲a在线观看| free欧美性| 亚洲视频二| 黄页在线播放网址| 又黄又免费的网站| 日本免费黄色小视频| 色哟永久免费| 亚洲欧美色图| 亚洲视频精品| a亚洲| www.99在线| 男女交性视频免费播放| 国产一级特黄a大片免费| 91精品福利久久久| 欧美色图久久|