Android 9.0 获取内置存储外置sd卡根路径和内外各自内存大小

本文介绍如何在Android 9.0中获取内置存储和外置SD卡的根路径及存储空间信息,包括剩余和总容量,以及系统内存的监控和SD卡热插拔的处理。内容涵盖反射获取存储设备信息、判断SD卡挂载状态、内存计算和单位转换等。
摘要由CSDN通过智能技术生成

本文章亲测有效,有部分参考自网络后测试改动,雷同请告知

获取全部存储设备信息封装对象

//通过过滤日志输出可发现,内外存储的removable:true---state:unmounted是存在变化的我们可以通过 该removable为true  state为 mounted 判断出外置存储是否挂载详情见下面函数isStorageMounted()
   // 
   /*    2019-06-19 17:55:51.004 2330-2330/com.dami.filemanager D/LHW: path:/storage/emulated/0----removable:false---state:mounted
          2019-06-19 17:55:51.004 2330-2330/com.dami.filemanager D/LHW: path:/storage/03DB-0FEC----removable:true---state:unmounted
          2019-06-19 17:55:51.064 2330-2330/com.dami.filemanager D/LHW: path:/storage/emulated/0----removable:false---state:mounted
          2019-06-19 17:55:51.064 2330-2330/com.dami.filemanager D/LHW: path:/storage/03DB-0FEC----removable:true---state:unmounted*/
      }
      
     public static  void testVolume(Context context){
          ArrayList<Volume> list_volume =getVolume(context);
          for (int i = 0; i < list_volume.size(); i++) {
              LogUtils.D("LHW", "path:" + list_volume.get(i).getPath() + "----" + "removable:" + list_volume.get(i).isRemovable() + "---" + "state:" + list_volume.get(i).getState());
          }
 
    /*
       获取全部存储设备信息封装对象
        */
    public static ArrayList<Volume> getVolume(Context context) {
        ArrayList<Volume> list_storagevolume = new ArrayList<Volume>();
        StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
        try {
            Method method_volumeList = StorageManager.class.getMethod("getVolumeList");
            method_volumeList.setAccessible(true);
            Object[] volumeList = (Object[]) method_volumeList.invoke(storageManager);
            if (volumeList != null) {
                Volume volume;
                for (int i = 0; i < volumeList.length; i++) {
                    try {
                        volume = new Volume();
                        volume.setPath((String) volumeList[i].getClass().getMethod("getPath").invoke(volumeList[i]));
                        volume.setRemovable((boolean) volumeList[i].getClass().getMethod("isRemovable").invoke(volumeList[i]));
                        volume.setState((String) volumeList[i].getClass().getMethod("getState").invoke(volumeList[i]));
                        list_storagevolume.add(volume);
                    } catch (IllegalAccessException e) {
      
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值