android - Android:重新安装我的应用程序后无法访问我的应用程序创建的文件
问题描述
我有在共享存储中创建文件的应用程序,我使用MediaStore创建和读取文件,我的应用程序成功创建和读取文件,但是在我再次卸载并重新安装后,我的应用程序无法访问之前创建的文件,即使我检查使用文件管理器文件仍然存在。那么,重新安装后如何访问卸载前创建的文件?谢谢
这是我创建文件的代码
String db_name = c.getString(R.string.db_name);
String backupDbName = "backup-"+utility.getCurrentDateTimeNoSpace()+"-"+db_name;
File currentDB = c.getDatabasePath(db_name);
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst;
ParcelFileDescriptor pfd = null;
ContentResolver resolver = c.getContentResolver();
Uri uri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
ContentValues values = new ContentValues();
values.put(MediaStore.Files.FileColumns.DISPLAY_NAME, backupDbName);
values.put(MediaStore.Files.FileColumns.TITLE, backupDbName);
values.put(MediaStore.Files.FileColumns.RELATIVE_PATH, Environment.DIRECTORY_DOCUMENTS + File.separator
+ c.getString(R.string.app_name)+ "-" + BACKUP + File.separator + DATABASE);
Uri fileUri = resolver.insert(uri, values);
pfd = resolver.openFileDescriptor(fileUri, "w", null);
dst = new FileOutputStream(pfd.getFileDescriptor()).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
if(pfd != null) pfd.close();
这是读取文件的代码
@RequiresApi(api = Build.VERSION_CODES.Q)
private Cursor getFiles(String folderName){
String[] projection = new String[]{MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DISPLAY_NAME};
String selection = MediaStore.Files.FileColumns.RELATIVE_PATH+" = ? OR "
+ MediaStore.Files.FileColumns.RELATIVE_PATH +" = ?";
String rel_path = Environment.DIRECTORY_DOCUMENTS + File.separator
+ c.getString(R.string.app_name)+ "-" + BACKUP + File.separator + folderName;
ContentResolver resolver = c.getContentResolver();
Uri uri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
return resolver.query(uri, projection, selection,
new String[]{rel_path + File.separator, rel_path}, null);
}
解决方案
推荐阅读
- flutter - Flutter 旧应用升级今天使用
- python - Python - 在 x 轴上绘制时间图
- javascript - 在三个点处构建弧(线段数组)
- javascript - Javascript Websocket 无法接收 TCP 数据
- configuration - 没有 server.conf 但 Openvpn Access Server 在 Ubuntu 16.04 上运行良好
- python - 在文本之后匹配所有带有模式的行,直到模式匹配失败正则表达式
- winston - 如何在汇总捆绑的 Sapper 应用程序中使用 Winston 进行日志记录?
- python - 在 pytorch 中从预训练的 resnet50 中提取特征
- swift - 使用 CoreAnimation 动画填充矩形
- node.js - 在函数调用期间,如何在 Typescript 中使用剩余参数?