public class MineFileUtils {
/**
* 使用本地安装的文件查询器,打卡文件
*
* @param activity
* @param filepath
*/
public static void openAndroidFile(Activity activity, String filepath) {
Intent intent = new Intent();
// 这是比较流氓的方法,绕过7.0的文件权限检查
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
}
File file = new File(filepath);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//设置标记
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setAction(Intent.ACTION_VIEW);//动作,查看
intent.setDataAndType(Uri.fromFile(file), getMIMEType(file));//设置类型
activity.startActivity(intent);
}
/**
* 快速获取指定的文件
*
* @param context
* @param extension
* @return
*/
public static List<String> getSpecificTypeOfFile(Context context, String[] extension) {
List<String> list = new ArrayList<>();
//从外存中获取
Uri fileUri = MediaStore.Files.getContentUri("external");
//筛选列,这里只筛选了:文件路径和不含后缀的文件名
String[] projection = new String[]{
MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.TITLE
};
//构造筛选语句
String selection = "";
for (int i = 0; i < extension.length; i++) {
if (i != 0) {
selection = selection + " OR ";
}
selection = selection + MediaStore.Files.FileColumns.DATA + " LIKE '%" + extension[i] + "'";
}
//按时间递增顺序对结果进行排序;待会从后往前移动游标就可实现时间递减
String sortOrder = MediaStore.Files.FileColumns.DATE_MODIFIED;
//获取内容解析器对象
ContentResolver resolver = context.getContentResolver();
//获取游标
Cursor cursor = resolver.query(fileUri, projection, selection, null, sortOrder);
if (cursor == null) {
return list;
}
//游标从最后开始往前递减,以此实现时间递减顺序(最近访问的文件,优先显示)
if (cursor.moveToLast()) {
do {
//输出文件的完整路径
String data = cursor.getString(0);
list.add(data);
} while (cursor.moveToPrevious());
}
cursor.close();
return list;
}
}
安卓工具类:FileUtils
最新推荐文章于 2023-05-13 10:25:06 发布