Android可采用存储-获得免费空间

Android可采用存储-获得免费空间,android,android-6.0-marshmallow,android-sdcard,android-internal-storage,Android,Android 6.0 Marshmallow,Android Sdcard,Android Internal Storage,我有一个应用程序使用3种存储:内部存储、外部SD和如果版本>=6.0,则为SD。 我通过使用getExternalFilesDirs()获取外部SD路径,通过getFilesDir()获取内部存储,通过Environment.getExternalStorageDirectory()获取所采用的(=内部)SD路径 现在,如果我想得到自由空间,像这样: StatFs statFs = new StatFs(storageDir); long blocks = statFs.getAvailable

我有一个应用程序使用3种存储:内部存储、外部SD和如果版本>=6.0,则为SD。
我通过使用
getExternalFilesDirs()
获取外部SD路径,通过
getFilesDir()
获取内部存储,通过
Environment.getExternalStorageDirectory()获取所采用的(=内部)SD路径
现在,如果我想得到自由空间,像这样:

StatFs statFs = new StatFs(storageDir);
long blocks = statFs.getAvailableBlocks();
return Formatter.formatFileSize(this, blocks * statFs.getBlockSize()); 
适用于内部存储和外部SD,但对于已采用的SD,它返回的值与内部存储的值相同,内部存储是纯内部存储,没有额外的SD空间

现在我的问题是:有没有办法获得由内部+外部组成的自由空间?据我所知,我甚至不知道是否有采用的SD存在,因为
getExternalFilesDirs()
始终包含
/storage/simulated/0
(这是
环境的绝对路径。对于我测试的大多数设备,getExternalStorageDirectory()
),无论是否安装


编辑:我只是检查
getExternalStorageDirectory()
的可用空间是否大于
getFilesDir()
+100MB,因为我想使用采用的SD作为替代存储,如果上面没有可用空间,我就不需要它,但这不是它应该工作的方式,可以吗?

我能提供的最好的方法是,可采用的存储将安装在
/mnt/expand/[uuid]
上,但非根应用程序无法读取该目录/卷的信息。我可以创建一个指向
/mnt/expand
文件,对于
exists()
isDir()
,它将返回true,但是
列表文件
返回
null
。您找到解决方案了吗?