Erlo

Android设备基础信息获取 源码修改方式 APK开发

2025-02-13 20:29:23 发布   40 浏览  
页面报错/反馈
收藏 点赞

APK 获取设备信息

头文件

import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

获取设备型号

public static String getDeviceModel() {
    return Build.MODEL;
}

获取设备制造商

public static String getManufacturer() {
    return Build.MANUFACTURER;
}

获取Android版本号

public static String getAndroidVersion() {
    return Build.VERSION.RELEASE;
}

获取SDK版本信息

public static int getDeviceSDK(){
    return android.os.Build.VERSION.SDK_INT;
}

获取当前设备安全补丁级别日期

public static String getSecurityPatchLevel() {
    return Build.VERSION.SECURITY_PATCH;
}

获取设备制造商

public static String getDeviceMANUFACTURER() {
    return Build.SOC_MANUFACTURER;
}

获取构建的内部版本

内部版本Build IDrb-a3568/build/make/core/build_id.mk 目录下

public static String getBuildID() {
    return Build.ID;
}

获取显示信息

public static String getDisplay() {
    return Build.DISPLAY;
}

获取设备硬件名

public static String getHardware() {
    return Build.HARDWARE;
}

获取设备CPU架构

public static String getCpuArchitecture() {
    return Build.CPU_ABI;
}

获取CPU名称

通过读取Linux文件的形式获取

public static String getCpuName() {
    String str1 = "/proc/cpuinfo";
    String str2 = "";
    String cpuName = "";
    try {
        FileReader fileReader = new FileReader(str1);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        while ((str2 = bufferedReader.readLine()) != null) {
            // 为空跳过
            if (TextUtils.isEmpty(str2)) {
                continue;
            }
            // 进行 分割 对比
            // 使用split(":\s+", 2)方法将字符串str2按冒号和后续空格分割成最多两部分。例如,"Hardware: Intel Core i7"会被分成["Hardware", "Intel Core i7"]。
            String[] arrayOfString = str2.split(":\s+", 2);
            if (TextUtils.equals(arrayOfString[0].trim(), "Hardware")) {
                cpuName = arrayOfString[1];
                break;
            }
        }
        bufferedReader.close();
        fileReader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return cpuName;
}

获取CPU核数

public static String getCpuCores() {
    return Build.CPU_ABI;
}

获取CPU频率

public static final int DEVICEINFO_UNKNOWN = -1;
/**
     * Method for reading the clock speed of a CPU core on the device. Will read from either
     * {@code /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq} or {@code /proc/cpuinfo}.
     *
     * @return Clock speed of a core on the device, or -1 in the event of an error.
     * 获取 CPU 频率
     */
public static ArrayList getCPUFreqMHzs() {
    int maxFreq = DEVICEINFO_UNKNOWN;
    int curFreq = 0;
    ArrayList arrayList = new ArrayList();
    try {
        int coreNum = getNumberOfCPUCores();
        for (int i = 0; i 

获取设备内存信息

// 获取设备总内存
public static String getTotalMemory(Context context) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
    am.getMemoryInfo(mi);
    return Formatter.formatFileSize(context, mi.totalMem);// 将获取的内存大小规格化
}

// 获取设备剩余内存
public static String getAvailableMemory(Context context) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
    am.getMemoryInfo(mi);
    return Formatter.formatFileSize(context, mi.availMem);// 将获取的内存大小规格化
}

// 格式化文件大小,单位为MB
private static String formatFileSize(long sizeInBytes) {
    return Formatter.formatFileSize(null, sizeInBytes);
}

获取主板品牌

public static String getBRAND() {
    return Build.BRAND;
}

统一输出日志

// 统一日志输出方法
public static void logDeviceInfo(Context context) {
    if (true) { // 仅在 Debug 模式打印日志,避免正式版泄露设备信息
        Log.i(TAG, "===== 设备信息 =====");
        Log.i(TAG, String.format("设备型号: %s", getDeviceModel()));
        Log.i(TAG, String.format("Android 版本: %s (SDK %d)", getAndroidVersion(), getDeviceSDK()));
        Log.i(TAG, String.format("安全补丁级别: %s", getSecurityPatchLevel()));
        Log.i(TAG, String.format("Build 号: %s", getBuildID()));
        Log.i(TAG, String.format("屏幕显示信息: %s", getDisplay()));
        Log.i(TAG, "===== 产品信息 =====");
        Log.i(TAG, String.format("硬件信息: %s", getHardware()));
        Log.i(TAG, String.format("制造商: %s", getDeviceMANUFACTURER()));
        Log.i(TAG, String.format("品牌: %s", getBRAND()));

        Log.i(TAG, "===== 内存信息 =====");
        Log.i(TAG, String.format("总内存: %s", getTotalMemory(context)));
        Log.i(TAG, String.format("可用内存: %s", getAvailableMemory(context)));
        Log.i(TAG, "======CPU信息=======");
        Log.i(TAG, String.format("CPU 名称: %s", getCpuName()));
        Log.i(TAG, String.format("CPU 架构: %s", getCpuArchitecture()));
        Log.i(TAG, String.format("CPU 核数: %s", getNumberOfCPUCores()));
        Log.i(TAG, String.format("CPU 频率: %s", getCPUFreqMHzs()));
    }
}

获取存储信息

// 获取设备存储 信息
// 获取StorageManager实例
private String GetStorageInfo(Map m_Device_Map) throws IOException {
    String Storege_info = "";
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
        StorageStatsManager storageStatsManager = (StorageStatsManager)getSystemService(STORAGE_STATS_SERVICE);
        List volumeList = storageManager.getStorageVolumes();

        Log.i(Tag,"获取的存储数量" + volumeList.size());
        for (StorageVolume volume : volumeList) {
            if (null != volume ) {
                String label = volume.getDescription(this);   //这个其实就是U盘的名称
                String status = volume.getState();                   //设备挂载的状态,如:mounted、unmounted
                boolean isEmulated = volume.isEmulated();            //是否是内部存储设备
                boolean isRemovable = volume.isRemovable();          //是否是可移除的外部存储设备
                String mPath="";                                     //设备的路径
                Log.i(Tag,"name:"+label);
                Log.i(Tag,"status:"+status);
                Log.i(Tag,"isEmulated:"+isEmulated);
                Log.i(Tag,"isRemovable:"+isRemovable);

                File file;
                try {
                    long totalSpace = 0;
                    long availSpace = 0;
                    file = volume.getDirectory();
                    mPath = file.getPath();
                    Log.i(Tag,"mPath:"+mPath);
                    // 判断存储路径是否指向系统盘
                    String path = volume.getDirectory().getAbsolutePath();
                    if (mPath.contains("/storage/emulated/0") ) {
                        // 读取系统所在占用空间
                        try {
                            totalSpace = storageStatsManager.getTotalBytes(StorageManager.UUID_DEFAULT);//总空间大小
                            availSpace = storageStatsManager.getFreeBytes(StorageManager.UUID_DEFAULT);//可用空间大小
                            long systemBytes = totalSpace - availSpace;//系统所占不可用空间大小
                            Log.i(Tag,"totalBytes:"+ formatFileSize(totalSpace));
                            Log.i(Tag,"isEmulated:"+ formatFileSize(availSpace));
                            Log.i(Tag,"systemBytes:"+ formatFileSize(systemBytes));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    else {
                        // 通过读取挂载文件夹的形式读取文件空间
                        totalSpace = file.getTotalSpace();
                        availSpace = file.getFreeSpace();
                        Log.i(Tag, "可用的block数目::" + SDCardUtils.formatFileSize(totalSpace) + ",剩余空间:" + SDCardUtils.formatFileSize(availSpace));

                    }
                    // 设备名称 对应的空间容量
                    m_Device_Map.put(label,"Storage:" + formatFileSize(totalSpace) );
                }catch (Exception e) {
                    e.toString();
                }
            }
            else
            {
                Log.i(Tag,"Not volume");
            }
        }
    }
    //想看外部存储时,替换uuid即可
    return Storege_info;
}

/**
     * 格式化文件大小并转换为可视化单位(B, KB, MB, GB, TB)
     */
private   String formatFileSize(long sizeInBytes) {
    if (sizeInBytes = 1000 && unitIndex 

设备信息源码位置修改

buildmakecoresysprop.mk
源代码位置

查看依赖关系

  • 搜索到数据很多,根据当前使用的Rockchip 3568的芯片,找到 3568对应的文件夹下的 device/rockchip/rk356x/rk3568_t/rk3568_t.mk

搜索到很多

  • 根据需求修改相应的参数

根据需求进行DIY的修改

参考资料

android利用StorageStatsManager获取应用程序的存储信息

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认