Android 高低版本区分外部存储设备类型

Android 常见的外部拓展存储主要类型有SD卡和U盘设备.

Android低版本可以直接根据路径进行判断设备类型,具体方法如下:

一:获取Android所有存储设备路径,并将对应路径存入map中.

    public static final String INTERNAL_SD = "INTERNAL_SD";
    public static final String EXTERNAL_SD = "EXTERNAL_SD";
    public static final String EXTERNAL_USB = "EXTERNAL_USB";

    // 获取机器所有的存储设备地址
    public static Map<String, File> getAllStorageLocations() {
        Map<String, File> map = new HashMap<String, File>(10);
        // 获取内部存储路径,存入INTERNAL_SD中
        map.put(INTERNAL_SD, Environment.getExternalStorageDirectory());

        Scanner scanner = null;
		mUsbAvailCnt=0;
        try {
            File mountFile = new File("/proc/mounts");
            if (mountFile.exists()) {
                scanner = new Scanner(new BufferedReader(new FileReader("/proc/mounts")));//new Scanner(mountFile);
                while (scanner.hasNext()) {
                    String line = scanner.nextLine();
                    // 获取SD卡对应路径,存入EXTERNAL_SD中
                    if (line.startsWith("/dev/block/vold/public:179")) {
                        String[] lineElements = line.split(" ");
                        String element = "/storage/" + lineElements[1].substring(lineElements[1].lastIndexOf("/"));
                        Log.d(TAG, "EXTERNAL_SD: " + element);

                        File ff = new File(element);
                        if (ff.exists() && ff.isDirectory()) {
                            Log.d(TAG, "EXTERNAL_SD +=" + ff.getPath());
                            map.put(EXTERNAL_SD, ff);
                        }
                    // 获取Upan对应路径,存入EXTERNAL_USB中
                    } else if (line.startsWith("/dev/block/vold/public:8")) {
                        String[] lineElements = line.split(" ");
                        String element = "/storage/" + lineElements[1].substring(lineElements[1].lastIndexOf("/"));
                        File ff = new File(element);
                        Log.d(TAG, "EXTERNAL_USB: " + element);
                        Log.d(TAG, "EXTERNAL_USB: " + line);
                        if (ff.exists() && ff.isDirectory()) {
                            Log.d(TAG, "EXTERNAL_USB +=" + ff.getPath());
                            mUsbAvailCnt++;
                            String key = EXTERNAL_USB + String.valueOf(mUsbAvailCnt);
                            map.put(key, ff);
                        }
                    }
                }
            }
        } catch (Exception e) {
            Log.d(TAG, "Exception: " + e);
        } finally {
            if (scanner != null) {
                scanner.close();
            }
        }
        return map;
    }


    public static String getSDCardStoragePath() {
        Map<String, File> map = getAllStorageLocations();
		if(map.get(EXTERNAL_SD) == null) {
              return "null/";
		}
		else {
          return map.get(EXTERNAL_SD).getPath() + "/";
		}
    }

    public static String getUSBStoragePath() {
        int index = getUSBStoragePathIndex();
        String finalpath = "null";
        if(mUsbPathArray != null && mUsbPathArray.length > 0) {
            finalpath = mUsbPathArray[index];
        }
        Log.d(TAG, "finalpath: " + finalpath);
        return finalpath + "/";
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brave & Real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值