我正在使用context.getFilesDir(),以防我无法将文件存储在外部存储中。然后我使用getAvailableBytes()或bytesAvailable =(long)stat.getBlockSize()*(long)stat.getAvailableBlocks();基于构建来检查可用空间。
在模拟器和我的测试设备上,它工作正常。但是当其他人从播放中安装我的应用时,他们总是获得0字节作为可用空间。有人可以给出提示或解决方案,为什么会发生这种情况。
我应该使用Environment.getDataDirectory()。getAbsolutePath()而不是context.getFilesDir()。getAbsolutePath(),这可能是原因吗?但那么它如何在模拟器或我的开发设备中工作?
请找到以下代码:
public static String getOutputDirectory(Context context)
{
String outputstore = System.getenv("SECONDARY_STORAGE");
if(outputstore == null)
{
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
outputstore = Environment.getExternalStorageDirectory().getAbsolutePath();
else
outputstore = context.getFilesDir().getAbsolutePath();
}
return outputstore;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public static boolean isFreeSpace(Context context)
{
long bytesAvailable =0;
StatFs stat = new StatFs(getOutputDirectory(context));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
{
bytesAvailable = stat.getAvailableBytes();
}
else
{
bytesAvailable = (long)stat.getBlockSize() * (long)stat.getAvailableBlocks();
}
long megAvailable = bytesAvailable / (1024L * 1024L);
if(megAvailable <= Constants.SPACE_CHECK_MEGABYTES)
{
return false;
}
else
{
return true;
}
}
}
感谢任何帮助。感谢。
答案 0 :(得分:0)
如果它可以用于此目的,您可以使用它,但它使用一些不推荐使用的方法。
public static long getAvailableStorage() {
String storageDirectory = null;
storageDirectory = Environment.getExternalStorageDirectory().toString();
try {
StatFs stat = new StatFs(storageDirectory);
long avaliableSize = ((long) stat.getAvailableBlocks() * (long) stat
.getBlockSize());
return avaliableSize;
} catch (RuntimeException ex) {
return 0;
}
}
答案 1 :(得分:0)
问题出在String outputstore = System.getenv(“SECONDARY_STORAGE”);在三星和其他一些设备中,虽然没有安装SD卡,但此语句返回的值不是null。下面的代码将修复它。
String outputstore = System.getenv("SECONDARY_STORAGE");
if(outputstore != null)
{
File secondaryStorage = new File(outputstore + File.separator + Constants.VIDEO_PREFIX);
if(!(secondaryStorage.exists() && secondaryStorage.canWrite()))
{
//If sd card found(or a false positive) and not writable or exists
//then try getting internal storages
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
outputstore = Environment.getExternalStorageDirectory().getAbsolutePath();
else
outputstore = context.getFilesDir().getAbsolutePath();
}
}
else
{
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
outputstore = Environment.getExternalStorageDirectory().getAbsolutePath();
else
outputstore = context.getFilesDir().getAbsolutePath();
}