Android 获取storage存储根目录

sancaiodm Android源码摘录 2023-04-16 1088 0


     //判断是否是OTG设备,异线程循环查询可改造成OTG设备是否已插入
     /**
     * check if volume is USB OTG.
     *
     * @return boolean
     */
    private static boolean isUSBOTG(VolumeInfo volumeInfo) {

        if (volumeInfo == null) {
            return false;
        }
        DiskInfo diskInfo = volumeInfo.getDisk();
        if (diskInfo == null) {
            return false;
        }

        String diskID = diskInfo.getId();
        if (diskID != null) {
            // for usb otg, the disk id same as disk:8:x
            String[] idSplit = diskID.split(":");
            if (idSplit != null && idSplit.length == 2) {
                if (idSplit[1].startsWith("8,")) {
                    Utils.logd(TAG, "this is a usb otg");
                    return true;
                }
            }
        }
        return false;
    }
   
   /**
     * @return String   获取SDcard目录,此SDCARD是系统内部存储目录,非TF卡目录 
     */
    public static String getInternalSdPath() {
        Utils.logd(TAG + "/Utils", "-->getDefalueInternalSdPath()");
        String internalPath = null;
        StorageManager storageManager = (StorageManager) MyApplication.getInstance()
                .getApplicationContext().getSystemService(Context.STORAGE_SERVICE);
        StorageVolume[] volumes = storageManager.getVolumeList();
        for (StorageVolume volume : volumes) {
            String volumePathStr = volume.getPath();
            if (Environment.MEDIA_MOUNTED.equalsIgnoreCase(volume.getState())) {
                Utils.logd(TAG + "/Utils", volumePathStr + " is mounted!");
                VolumeInfo volumeInfo = storageManager.findVolumeById(volume.getId());
                if (volumeInfo == null || isUSBOTG(volumeInfo)) {
                    continue;
                }
                if (volume.isEmulated()) {
                    String viId = volumeInfo.getId();
                    Utils.logd(TAG + "/Utils", "Is emulated and volumeInfo.getId() : " + viId);
                    // If external sd card, the viId will be like
                    // "emulated:179,130"
                    if (viId.equalsIgnoreCase("emulated") || viId.equalsIgnoreCase("emulated;0")) {
                        internalPath = volumePathStr;
                        break;
                    }
                } else {
                    DiskInfo diskInfo = volumeInfo.getDisk();
                    if (diskInfo == null) {
                        continue;
                    }
                    if (diskInfo.isSd()) {
                        continue;
                    }
                }
            } else {
                Utils.logd(TAG + "/Utils", volumePathStr + " is not mounted!");
            }
        }
        Utils.logd(TAG + "/Utils", "<--getDefalueInternalSdPath() = " + internalPath);
        return internalPath;
    }

    /**
     * @return String   获取SDcard目录,此SDCARD是可插播的TF卡,如系统目录 /storage/2368-1312
     */
     
     // androidos:/storage $ ls
     //      2368-1312  emulated  sdcard0  self   //2368-1312是sdcard fsduuid
     // androidos:/storage $
     
    public static String getExternalSdPath() {
        Utils.logd(TAG + "/Utils", "-->getDefaultExternalSdPath()");
        String externalPath = null;
        StorageManager storageManager = (StorageManager) MyApplication.getInstance()
                .getApplicationContext().getSystemService(Context.STORAGE_SERVICE);
        StorageVolume[] volumes = storageManager.getVolumeList();
        for (StorageVolume volume : volumes) {
            String volumePathStr = volume.getPath();
            if (Environment.MEDIA_MOUNTED.equalsIgnoreCase(volume.getState())) {
                Utils.logd(TAG + "/Utils", volumePathStr + " is mounted!");
                VolumeInfo volumeInfo = storageManager.findVolumeById(volume.getId());
                if (volumeInfo == null || isUSBOTG(volumeInfo)) {
                    continue;
                }
                if (volume.isEmulated()) {
                    String viId = volumeInfo.getId();
                    Utils.logd(TAG + "/Utils", "Is emulated and volumeInfo.getId() : " + viId);
                    // If external sd card, the viId will be like
                    // "emulated:179,130"
                    if (!viId.equalsIgnoreCase("emulated")
                            && !viId.equalsIgnoreCase("emulated;0")) {
                        externalPath = volumePathStr;
                        break;
                    }
                } else {
                    DiskInfo diskInfo = volumeInfo.getDisk();
                    if (diskInfo == null) {
                        continue;
                    }
                    if (diskInfo.isSd()) {
                        externalPath = volumePathStr;
                        break;
                    }
                }
            } else {
                Utils.logd(TAG + "/Utils", volumePathStr + " is not mounted!");
            }
        }
        Utils.logd(TAG + "/Utils", "<--getDefaultExternalSdPath() = " + externalPath);
        return externalPath;
    }
	

评论