Android多功能文件选择器,支持访问Android/data(obb)等系统文件夹

一款具有多种功能的文件选择器,支持访问Android/data(obb)等系统文件夹

介绍

GitHub地址:Fileselector

  1. 这是一个文件选择器
  2. 可以区分多种文件类型,并支持自定义它们的图标
  3. 支持多选和单选
  4. 可以对选择或显示的文件类型进行指定
  5. 提供功能拓展菜单进行自定义
  6. 支持访问/选择Android系统文件(夹)
  7. 支持文件列表下拉刷新
  8. 支持非英文路径显示和访问
  9. 采用多线程加载,打开文件列表更迅捷

实例展示

在这里插入图片描述

顶部导航栏可点击长按条目可选择
在这里插入图片描述在这里插入图片描述
可自定义拓展功能下拉列表刷新
在这里插入图片描述在这里插入图片描述

使用方法

基础使用

gradle:project 中

allprojects {
    repositories {
        google()
        maven { url 'https://www.jitpack.io' }
        jcenter()
    }
}

gradle:app 中

implementation 'com.github.zzy0516alex:FileSelectorRelease:v6.1'

Manifest中

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
        ...
        android:requestLegacyExternalStorage ="true">    
<application> 

依赖与权限设置完成后
在你的Activity中

FileSelectorSettings settings = new FileSelectorSettings();
                settings.setRootPath(FileSelectorSettings.getSystemRootPath()+"/Android")//起始路径
                        .setMaxFileSelect(2)//最大文件选择数
                        .setTitle("请选择文件夹")//标题
                        .setFileTypesToSelect(FileInfo.FileType.Folder)//可选择文件类型
                        .show(MainActivity.this);//显示

获取返回的数据

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == FileSelectorSettings.FILE_LIST_REQUEST_CODE && resultCode == FileSelectorSettings.BACK_WITH_SELECTIONS){
            assert data != null;
            Bundle bundle=data.getExtras();
            assert bundle != null;
            ArrayList<String> FilePathSelected
                    =bundle.getStringArrayList(FileSelectorSettings.FILE_PATH_LIST_REQUEST);
            for (String file_path :
                    FilePathSelected) {
                Log.v("file_sel", file_path);
            }
        }
    }

添加拓展功能菜单

FileSelectorSettings settings=new FileSelectorSettings();
        settings.setMoreOptions(new String[]{"新建文件夹", "删除文件","反选","转到系统目录"},
                        (activity, currentPath, FilePathList, FilePathSelected) -> {
                            File Folder =new File(currentPath,"新文件夹");
                            if(!Folder.exists()){
                                Folder.mkdir();
                            }
                        }, (activity, currentPath, FilePathList, FilePathSelected) -> {
                            if (FilePathSelected!=null){
                                for (String path : FilePathSelected) {
                                    File delFile=new File(path);
                                    delFile.delete();
                                }
                            }
                        },(activity, currentPath, FilePathList, FilePathSelected) -> {
                            List<Integer>selectList = new ArrayList<>();
                            for (int i = 0; i < FilePathList.size(); i++) {
                                if (FilePathSelected.contains(FilePathList.get(i)))continue;
                                selectList.add(i);
                            }
                            activity.updateFileSelectList(selectList);
                        },(activity, currentPath, FilePathList, FilePathSelected) -> {
                            activity.updateFileList(FileSelectorSettings.getSystemRootPath()+"/Android/data");
                        })
                .show(this);

设置了拓展功能菜单后,顶栏右上角会出现功能菜单图标,点击后将弹出你自定义的菜单栏。需要注意的是,在setMoreOptions方法中参数一与参数二的长度需一致。
本方法提供四个回调参数(详见后文BasicParams.OnOptionClick部分),开发者可以利用这些参数进行拓展。
上面实例代码中给出了四种常见的选项供开发者参考。

自定义文件显示和图标

FileSelectorSettings settings = new FileSelectorSettings();
            settings.setRootPath(FileSelectorSettings.getSystemRootPath())
                    .setMaxFileSelect(2)
                    .setTitle("请选择文件夹")
                    .setFileTypesToSelect(FileInfo.FileType.Unknown)//选择自定义后缀的文件此处参数需为Unknown
                    .setFileTypesToShow(".cer")//自定义可见的文件后缀
                    .setCustomizedIcons(new String[]{".cer"},context,R.mipmap.file_cert)//自定义文件图标
                    .show(MainActivity.this);

自定义图标及字体

FileSelectorTheme theme = new FileSelectorTheme();
        theme.setTopToolBarTitleColor("#03DAC5")
                .setThemeColor("#FFFFFF")
                .setTopToolBarTitleSize(28)
                .setTopToolBarBackIcon(R.mipmap.back_black)
                .setTopToolBarMenuIcon(R.mipmap.options)
                .setNaviBarArrowIcon(R.mipmap.segment)
                .setNaviBarTextSize(20)
                .setFileInfoColor(getColor(R.color.black))
                .setFileNameSize(25);
FileSelectorSettings settings = new FileSelectorSettings();
            settings.setTheme(theme)
                    .show(MainActivity.this);

更改默认的文件图标

本组件提供了一组默认的文件图标,如下:

图标资源名称对应文件类型
file_folder.png文件夹
file_audio.png音频文件
file_image.png图片文件
file_text.png文本文件
file_video.png视频文件
file_unknown.png其他文件

只需要在 res > mipmap 文件夹中添加同名的替换文件即可更改新图标。

访问data或obb文件夹

启动文件选择器

FileSelectorSettings settings=new FileSelectorSettings();
settings.setRootPath(FileSelectorSettings.getSystemRootPath() + "/Android/data")
        .setTitle("请选择文件夹")
        .setFileTypesToSelect(FileInfo.FileType.Folder)
        .show(this);

在onActivityResult中

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==FileSelectorSettings.FILE_LIST_REQUEST_CODE && resultCode==FileSelectorSettings.BACK_WITH_SELECTIONS){
            assert data != null;
            Bundle bundle=data.getExtras();
            assert bundle != null;
            ArrayList<String> FilePathSelected
                    =bundle.getStringArrayList(FileSelectorSettings.FILE_PATH_LIST_REQUEST);
            for (String file_path :
                    FilePathSelected) {
                FileInfo.AccessType accessType = FileInfo.judgeAccess(file_path);
                switch(accessType){
                    case Open:
                        File file = new File(file_path);
                        break;
                    case Protected:
                        DocumentFile documentFile = FileUtil.getDocumentFilePath(this,file_path);
                        break;
                    default:
                }
                Log.v("file_sel", file_path);
            }
        }
    }

注意通过FileInfo.judgeAccess方法区分是否是受保护的系统文件夹,如果是,则应该通过DocumentFile的方式来访问。

类与方法

FileSelectorTheme

下面图片中给出了UI的属性作用位置的序号:

在这里插入图片描述

属性入参类型注释对应UI位置
themeColorColor-int/Color-String主题色,顶栏及状态栏1
topToolBarBackIconResource ID顶部返回按钮2
topToolBarTitleColorColor-int/Color-String顶部标题及提示文本颜色3
topToolBarTitleSizesp顶部标题及提示文本大小3
topToolBarMenuIconResource ID顶部菜单按钮4
naviBarTextColorColor-int/Color-String导航栏字体颜色5
naviBarTextSizesp导航栏文本大小5
naviBarArrowIconResource ID导航栏分隔箭头6
fileNameColorColor-int/Color-String文件(夹)名称字体颜色7
fileNameSizesp文件(夹)名称字体大小7
fileInfoColorColor-int/Color-String文件信息提示字体颜色8
fileInfoSizesp文件信息提示字体大小8
checkboxDrawableResource ID勾选框的样式9

表中每个属性均有set方法,并有默认的属性,故该设置不是必须的设置。

FileSelectorSettings

方法作用注释
FileSelectorSettings setRootPath(String path)设置起始目录
FileSelectorSettings setFileListRequestCode(int requestCode)设置Activity请求码默认为512
FileSelectorSettings setMaxFileSelect(int num)设置最大文件选择数默认为-1,即不限制选择数量
FileSelectorSettings setTitle(String title)设置标题
FileSelectorSettings setTheme(FileSelectorTheme theme)设置界面主题(大部分图标及字体)
FileSelectorSettings setFileTypesToSelect(FileInfo.FileType … fileTypes)设置可选择的文件类型可以多选,但不能包含parent类型
FileSelectorSettings setFileTypesToShow(String … extensions)设置可见的文件类型后缀示例".txt",不填写则全部显示
FileSelectorSettings setCustomizedIcons(String[] extensions, Context context, int … icon_ids)设置自定义文件图标后缀名和图标资源id应一一对应
FileSelectorSettings setMoreOptions(String[] optionsName, BasicParams.OnOptionClick…onOptionClicks)设置更多选项,第一个参数为选项名,第二个参数为选项点击回调函数选项名和点击回调函数数量必须对应
static String getSystemRootPath()获取系统外部存储根目录:/storage/emulated/0

FileInfo.FileType

变量解释
Folder文件夹
Video视频文件
Image图片文件
Audio音频文件
Text文本文件
Unknown除上述类型以外的其他文件类型
File除Folder类型以外的其他文件类型
Parent不可用的变量

FileInfo.AccessType

变量解释
Open普通文件(夹)
ProtectedAndroid系统保护的文件(夹),必须通过SAF框架访问

BasicParams.OnOptionClick

接口抽象方法:onclick

void onclick(FileSelectorActivity activity, String currentPath, List<String> FilePathList, List<String> FilePathSelected);
参数解释
activity文件选择器的activity
currentPath当前所在的目录
FilePathList当前的文件(路径)列表
FilePathSelected当前用户选择的文件(路径)列表

FileSelectorActivity提供的公共方法:

方法解释
void updateFileSelectList(List<Integer> select_index_list)输入需要选中的列表项的索引的集合,更新当前列表的勾选状态,
void updateFileList(String new_path)输入用新的文件夹路径,用该路径更新文件列表
  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值