Closed zaaach closed 4 years ago
Issue Label Bot is not confident enough to auto-label this issue. See dashboard for more details.
@zaaach 非常抱歉给您带来困扰。您所使用的并不是正确的 API,所有带有 $
符号的函数都是被隐藏的函数。因为 Kotlin 的 internal
修饰符对 Java 代码无效,导致了这样的混乱的局面。您应该使用:
.filter(new AbstractFileFilter() {
@NotNull
@Override
public ArrayList<FileItemBeanImpl> doFilter(@NotNull ArrayList<FileItemBeanImpl> listData) {
return null;
}
})
有自定义几个类型,但好像没有起作用
.filter(new AbstractFileFilter() {
@NotNull
@Override
public ArrayList<FileItemBeanImpl> doFilter(@NotNull ArrayList<FileItemBeanImpl> arrayList)
ArrayList<FileItemBeanImpl> result = new ArrayList<>();
for (FileItemBeanImpl impl : arrayList) {
if ( impl.getFileType() instanceof PPTFileType
|| impl.getFileType() instanceof ExcelFileType
|| impl.getFileType() instanceof PdfFileType
|| impl.isDir()){
result.add(impl);
}
}
return result;
}
})
.forResult(FilePickerManager.REQUEST_CODE);
其中ExcelFileType是这样:
public class ExcelFileType implements FileType {
@Override
public int getFileIconResId() {
return R.mipmap.file_suffix_ic_xls;
}
@NotNull
@Override
public String getFileType() {
return "Excel";
}
@Override
public boolean verify(@NotNull String fileName) {
String suffix = FileUtils.getFileExtension(fileName).toLowerCase();
return "xls".equals(suffix) || "xlsx".equals(suffix);
}
}
打开后没有出来任何文件,不知道是不是我写的方式不对=。=
可以了,原来要配合fileType方法!
.fileType(new AbstractFileType() {
@NotNull
@Override
public FileItemBeanImpl fillFileType(@NotNull FileItemBeanImpl fileItemBean) {
String suffix = FileUtils.getFileExtension(fileItemBean.getFileName()).toLow
switch (suffix){
case "ppt":
case "pptx":
fileItemBean.setFileType(new PPTFileType());
break;
case "txt":
fileItemBean.setFileType(new TxtFileType());
break;
case "doc":
case "docx":
fileItemBean.setFileType(new WordFileType());
break;
case "pdf":
fileItemBean.setFileType(new PdfFileType());
break;
case "xls":
case "xlsx":
fileItemBean.setFileType(new ExcelFileType());
break;
}
return fileItemBean;
}
})
@zaaach 新的 0.6.3 版本调整了部分接口和可见性。避免了歧义的问题。 并且增加了自定义文件类型的 demo,欢迎您使用。
感谢您的反馈~
好的,感谢!!!
1. mFileTypeList = new ArrayList<>(); mFileTypeList.add(new CustomFileType()); 2. FilePickerManager.INSTANCE .from(MyOrdeDetailActivity.this) .enableSingleChoice() .registerFileType(mFileTypeList,false) .forResult(FilePickerManager.REQUEST_CODE); 3. public class CustomFileType implements FileType {
@Override
public int getFileIconResId() {
return R.drawable.ic_unknown_file_picker;
}
@NotNull
@Override
public String getFileType() {
return "Excel";
}
@Override
public boolean verify(@NotNull String fileName) {
boolean isHasSuffix = fileName.contains(".");
if (!isHasSuffix) {
// 如果没有 . 符号,即是没有文件后缀
return false;
}
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
return "pdf".equals(suffix)
|| "ppt".equals(suffix)
|| "pptx".equals(suffix)
|| "doc".equals(suffix)
|| "docx".equals(suffix)
|| "xls".equals(suffix)
|| "xlsx".equals(suffix);
}
}
我这样使用还是显示不出pdf等文件,版本是用0.8.0,这个版本看文档是直接registerFileType注入自定义类型CustomFileType就行了,但是没有生效,是我的CustomFileType类写得有问题吗?
@GirlFriendNotFind registerFileType
第二个参数传 true 试试看?
确定是有 pdf 文件的吗?你先去掉注册自定义类型,然后打印一下结果看看有没有。 @GirlFriendNotFind
@rosuH 感谢回复,传true只剩下文件夹能显示,文件都没有了。 有的,系统文件管理能看到pdf文件,去掉注册只使用最基本的api能看到mp3和图片等文件,也没看到pdf。使用手机是小米11
@rosuH 感谢回复,传true只剩下文件夹能显示,文件都没有了。 有的,系统文件管理能看到pdf文件,去掉注册只使用最基本的api能看到mp3和图片等文件,也没看到pdf。使用手机是小米11
有点奇怪...之前也有反馈 pdf 查不出来的问题。晚上我写 demo 试试看,现在暂时没有时间。
你可以自己先用 File.listFiles
的 api 看看能不能列出来,如果可以就是库的 bug。 @GirlFriendNotFind
@rosuH 好的,是使用过滤器打印的意思吗?
FilePickerManager.INSTANCE .from(MyOrdeDetailActivity.this) .enableSingleChoice() //.registerFileType(mFileTypeList, false)//注释掉自定义类型 .filter(aFilter)//添加过滤器 .forResult(FilePickerManager.REQUEST_CODE);
AbstractFileFilter aFilter = new AbstractFileFilter() {
@NotNull
@Override
public ArrayList
String fileName = fileItemBean.getFileName();
Log.v("aaa===", "fileName="+fileName);//====打印====
fileItemBeans.add(fileItemBean);
}
return fileItemBeans;
}
};
打印结果是只打印出根目录的文件夹名称和mp3文件名称,根目录下的pdf文件没有打印
@rosuH 找到解决方法了,要跟#152那个哥们那样处理才行#152 ,要多申请一个权限,这样才能读出文档文件,应该是高版本的限制
@rosuH 找到解决方法了,要跟#152那个哥们那样处理才行#152 ,要多申请一个权限,这样才能读出文档文件,应该是高版本的限制
理论上也不应该会这样...而且通常不见增加文件管理的权限。今晚手头没电脑,我周末试试看🐦
此问题已确认,在 Android 11 的平台上,申请 READ_EXTERNAL_STORAGE
只能读取媒体文件,文档类型和二进制文件将会被忽略。解决方案其实就是申请文件管理权限,或者降低 target API 的等级。
感谢您的反馈!
自己定义了几个文件类型,但是无法添加,java项目,大佬可以解决下这个吗? 调用时是这样的提示:方法都带release的