package com.netease.nim.uikit.common.util.storage;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
import android.text.TextUtils;
import java.io.File;
public class StorageUtil {
public final static long K = 1024;
public final static long M = 1024 * 1024;
// 外置存储卡默认预警临界值
private static final long THRESHOLD_WARNING_SPACE = 100 * M;
// 保存文件时所需的最小空间的默认值
public static final long THRESHOLD_MIN_SPCAE = 20 * M;
public static void init(Context context, String rootPath) {
ExternalStorage.getInstance().init(context, rootPath);
}
/**
* 获取文件保存路径,没有toast提示
*
* @param fileName
* @param fileType
* @return 可用的保存路径或者null
*/
public static String getWritePath(String fileName, StorageType fileType) {
return getWritePath(null, fileName, fileType, false);
}
/**
* 获取文件保存路径
*
* @param fileName 文件全名
* @param tip 空间不足时是否给出默认的toast提示
* @return 可用的保存路径或者null
*/
private static String getWritePath(Context context, String fileName, StorageType fileType, boolean tip) {
String path = ExternalStorage.getInstance().getWritePath(fileName, fileType);
if (TextUtils.isEmpty(path)) {
return null;
}
File dir = new File(path).getParentFile();
if (dir != null && !dir.exists()) {
dir.mkdirs();
}
return path;
}
/**
* 判断能否使用外置存储
*/
public static boolean isExternalStorageExist() {
return ExternalStorage.getInstance().isSdkStorageReady();
}
/**
* 判断外部存储是否存在,以及是否有足够空间保存指定类型的文件
*
* @param context
* @param fileType
* @param tip 是否需要toast提示
* @return false: 无存储卡或无空间可写, true: 表示ok
*/
public static boolean hasEnoughSpaceForWrite(Context context, StorageType fileType, boolean tip) {
if (!ExternalStorage.getInstance().isSdkStorageReady()) {
return false;
}
long residual = ExternalStorage.getInstance().getAvailableExternalSize();
if (residual < fileType.getStorageMinSize()) {
return false;
} else if (residual < THRESHOLD_WARNING_SPACE) {
}
return true;
}
/**
* 根据输入的文件名和类型,找到该文件的全路径。
*
* @param fileName
* @param fileType
* @return 如果存在该文件,返回路径,否则返回空
*/
public static String getReadPath(String fileName, StorageType fileType) {
return ExternalStorage.getInstance().getReadPath(fileName, fileType);
}
/**
* 获取文件保存路径,空间不足时有toast提示
*
* @param context
* @param fileName
* @param fileType
* @return 可用的保存路径或者null
*/
public static String getWritePath(Context context, String fileName, StorageType fileType) {
return getWritePath(context, fileName, fileType, true);
}
public static String getDirectoryByDirType(StorageType fileType) {
return ExternalStorage.getInstance().getDirectoryByDirType(fileType);
}
public static String getSystemImagePath() {
if (Build.VERSION.SDK_INT > 7) {
String picturePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();
return picturePath + "/nim/";
} else {
String picturePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
return picturePath + "/nim/";
}
}
public static boolean isInvalidVideoFile(String filePath) {
return filePath.toLowerCase().endsWith(".3gp")
|| filePath.toLowerCase().endsWith(".mp4");
}
public static void checkValid() {
ExternalStorage.getInstance().checkStorageValid();
}
}