Android获取外置SD卡读写路径

Posted liuwons

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android获取外置SD卡读写路径相关的知识,希望对你有一定的参考价值。

1. 外置SD卡的一些问题

1.1 关于外置SD卡上的读写路径

android 4.4及以上版本,应用的外置SD卡读写路径被限定在固定路径上(外置SD卡根路径/Android/data/包名/files)。

Android4.4以下版本,申请了外置SD卡读写权限的应用在整个外置SD卡上都有读写权限。

1.2 关于外置SD卡路径

另外Android没有提供获取外置SD卡路径的API(getExternalStorageDirectory()获取的实际是内置SD卡路径)。

2. 获取应用在外置SD卡读写根路径

Android 4.4以下版本,获取的应该是外置SD卡的根目录(类似/storage/sdcard1)。在Android 4.4及以上版本,获取的是应用在SD卡上的限定目录(外置SD卡根路径/Android/data/包名/files/file)

代码如下:


    public static String getExternalSDPath(Context aContext) 
        String root = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) 
            root = getExternalSDPathKITKAT(aContext);
            File f = new File(root);
            if (!f.exists()) 
                try 
                    f.mkdirs();
                 catch (Exception e) 
                    e.printStackTrace();
                
                if (!f.exists()) 
                    root = null;
                
            
         else 
            root = getExternalSDCardPath(aContext);
        
        return root;
    


    // Android 4.4及以上版本,获取软件在外置SD卡上的保存路径
    public static String getExternalSDPathKITKAT(Context aContext) 
        String rootPath = getStoragePath(aContext, true);
        if (TextUtils.isEmpty(rootPath)) 
            return null;
        
        File f = new File(rootPath, "Android/data/" + aContext.getPackageName() + "/files/file");
        String fpath = f.getAbsolutePath();
        return fpath;
    

    // Android 4.4 以下版本获取外置SD卡根目录
    public static String getExternalSDCardPath(Context aContext) 
        HashSet<String> paths = getExternalMounts();
        File defaultPathFile = aContext.getExternalFilesDir(null);
        String defaultPath;
        if (defaultPathFile == null) 
            return null;
         else 
            defaultPath = defaultPathFile.getAbsolutePath();
        
        String prefered = null;
        for (Iterator it = paths.iterator(); it.hasNext();) 
            String path = (String) (it.next());
            if (prefered == null && !defaultPath.startsWith(path)) 
                prefered = path;
            
        
        return prefered;
    

以上是关于Android获取外置SD卡读写路径的主要内容,如果未能解决你的问题,请参考以下文章

Android获取外置SD卡存储路径的方法

android获取内置和外置SD卡路径 - z

Android判断是否存在外置SD卡(获取手机所有存储设备的路径)

xamarin怎样获取android外卡路径

安卓手机如何读取外置sd卡

Android 内部存储/外部存储 及 读写权限