一个纯文档扫描功能,目前可扫描到系统中的所有"doc", “ppt”, “xls”, “pdf”, “docx”, “pptx”, “xlsx”, “txt”, “rar”, "zip"文档,可自由过滤类型,只扫描出文档数据,界面由你定制。使用步骤如下:
需要的相关权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
1.添加jar包
将下载的jar包放到你项目libs目录下并作为依赖库使用,jar包下载地址
2.声明你要扫描的文档类型
private String[] fileTypeArray = new String[]{"doc", "ppt", "xls", "pdf", "docx", "pptx",
"xlsx", "txt", "rar", "zip"};
3.实例化扫描器,根据文档类型获取对应的mimeType并在工作线程中开启扫描
private FilesFacade.MimeType mMimeType;
//扫描器实例
FilesFacade filesFacade = FilesFacade.getInstance(getActivity());
mMimeType = filesFacade.mimeType();
//多线程扫描各类型的文档
for (String fileType : fileTypeArray) {
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String mimeType = mimeTypeMap.getMimeTypeFromExtension(fileType);
Logger.d("文件mime类型:" + mimeType);
if (EmptyUtils.isNotEmpty(mimeType)) {
loadLocalFiles(fileType, mimeType);
}
}
3.扫描逻辑代码loadLocalFiles函数
private void loadLocalFiles(String fileType, String mimetype) {
ThreadPoolManager.getLongPool().execute(new Runnable() {
@Override
public void run() {
FilesCursor filesCursor = mMimeType.fetch(new String[]{mimetype});
int pathIndex = filesCursor.getColumnIndexOrThrow
(MediaStore.Files.FileColumns.DATA);
int titleIndex = filesCursor.getColumnIndexOrThrow
(MediaStore.Files.FileColumns.TITLE);
int sizeIndex = filesCursor.getColumnIndexOrThrow
(MediaStore.Files.FileColumns.SIZE);
int addedIndex = filesCursor.getColumnIndexOrThrow
(MediaStore.Files.FileColumns.DATE_ADDED);
List<FileChosenBean> files = new ArrayList<>();
filesCursor.moveToFirst();
while (filesCursor.moveToNext()) {
String fileName = filesCursor.getString(titleIndex);
Logger.d("文件标题:" + fileName);
String filePath = filesCursor.getString(pathIndex);
Logger.d("文件路径:" + filePath);
String fileSize = filesCursor.getString(sizeIndex);
Logger.d("文件大小:" + fileSize);
String addTime = filesCursor.getString(addedIndex);
Logger.d("文件添加时间:" + addTime);
FileChosenBean fileChosenBean = new FileChosenBean();
//构造文件后缀名
if (EmptyUtils.isNotEmpty(filePath) && filePath.contains(".")) {
String[] split = filePath.split("\\.");
if (split.length > 1) {
fileName = fileName + "." + split[split.length - 1];
}
}
fileChosenBean.addTime = addTime;
fileChosenBean.name = fileName;
fileChosenBean.path = filePath;
fileChosenBean.type = fileType;
fileChosenBean.size = fileSize;
files.add(fileChosenBean);
}
filesCursor.close();
//TODO 将扫描到的该类型的文档files发送到UI线程显示
}
});
}
4.FileChosenBean实体
public class FileChosenBean {
public boolean ischecked;
public String type;
public String name;
public String path;
public String size;
public String addTime;
}