如何正确获取安卓外置SD卡的路径

简介: 如何正确获取安卓外置SD卡的路径

有时获取安卓的SD卡,实际上是内置的。这个时候,怎样获取外置的路径呢?经常搜索,吾找到一个办法,共享给大家:


 

/**
     * 获取外置卡(可拆卸的)的目录。
     * Environment.getExternalStorageDirectory()获取的目录,有可能是内置卡的。
     * 在高版本上,能访问的外置卡目录只能是/Android/data/{package}。
     */
    public String getAppRootOfSdCardRemovable(Context context)
    {
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
        {
            return null;
        }
        /**
         * 这一句取的还是内置卡的目录。
         * /storage/emulated/0/Android/data/net.quantum6.q6telcom/cache
         * 神奇的是,加上这一句,这个可移动卡就能访问了。
         * 猜测是相当于执行了某种初始化动作。
         */
        StorageManager mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
        try
        {
            Class<?> storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
            Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
            Method getPath       = storageVolumeClazz.getMethod("getPath");
            Method isRemovable   = storageVolumeClazz.getMethod("isRemovable");
            Object result        = getVolumeList.invoke(mStorageManager);
            final int length     = Array.getLength(result);
            for (int i = 0; i < length; i++)
            {
                Object storageVolumeElement = Array.get(result, i);
                String path = (String) getPath.invoke(storageVolumeElement);
                if ((Boolean) isRemovable.invoke(storageVolumeElement))
                {
                  return path;
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }


 希望能给需要的朋友带来帮助。


 祝大家健康顺利。

目录
相关文章
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
845 0
|
Android开发 Kotlin
Android 获取当前的类名,包名,路径等
在做项目时,无论为了功能还是调试,很多时候都需要获取到当前类的类名,包名,路径等等。 在这里总结一下,以便总结和以后需要的时候更快的解决问题。
|
6月前
|
存储 缓存 安全
Android系统 应用存储路径与权限
Android系统 应用存储路径与权限
334 0
Android系统 应用存储路径与权限
|
6月前
|
JSON Android开发 数据格式
Android 打开系统文件管理器,并返回选中文件的路径
Android 打开系统文件管理器,并返回选中文件的路径
202 0
|
SQL 数据库 Android开发
Android 访问系统相册选中图片,并返回该图片的路径
Android 访问系统相册选中图片,并返回该图片的路径
206 0
|
Android开发
Android获取相册中图片的路径 4.4版本前后的变化
Android获取相册中图片的路径 4.4版本前后的变化
181 0
|
Java Android开发
android12.0(S) 从SD卡导入vCard文件到通讯录 号码带“-“ 如何把横线去除
android12.0(S) 从SD卡导入vCard文件到通讯录 号码带“-“ 如何把横线去除
158 0
|
Java Android开发
android 修改新增jar 路径
android 修改新增jar 路径
401 0
|
Android开发
安卓通过路径生成zip文件
安卓通过路径生成zip文件
196 0
|
5天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。