我正在尝试读取由我的应用程序(应用程序A)创建的Documents文件夹中的目录,由我的应用程序创建的文件(例如。文件名: abc.json)我可以阅读它,但如果我创建了另一个文件,比如xyz.json by other app,让我们说文件资源管理器,那么我就不能阅读它。
我在android 11中使用Medistore方法读取文件,我应该怎么做?
我用来执行读取的代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()==false) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
intent.setData(uri);
context.startActivity(intent);
}
}
try{
Uri contentUri = MediaStore.Files.getContentUri("external");
String selection = MediaStore.MediaColumns.RELATIVE_PATH + "=?";
String[] selectionArgs = new String[]{Environment.DIRECTORY_DOCUMENTS + "/"+folderName+"/"};
Cursor cursor =context.getContentResolver().query(contentUri, null, selection, selectionArgs, null);
Uri uri = null;
if (cursor.getCount() == 0) {
Toast.makeText(context, "No file found in \"" + Environment.DIRECTORY_DOCUMENTS + "/"+folderName+"\""+cursor.getCount(), Toast.LENGTH_LONG).show();
} else {
while (cursor.moveToNext()) {
int filenameTemp=cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);
String fileName = cursor.getString(filenameTemp);
if (fileName.equals(readFileName)) {
int idTemp=cursor.getColumnIndex(MediaStore.MediaColumns._ID);
long id = cursor.getLong(idTemp);
uri = ContentUris.withAppendedId(contentUri, id);
break;
}
}
if (uri == null) {
Toast.makeText(context, "\""+readFileName+"\" not found", Toast.LENGTH_SHORT).show();
} else {
try {
InputStream inputStream = context.getContentResolver().openInputStream(uri);
int size = inputStream.available();
byte[] bytes = new byte[size];
inputStream.read(bytes);
inputStream.close();
String jsonString = new String(bytes, StandardCharsets.UTF_8);
returnJsonString=jsonString;
} catch (IOException e) {
Toast.makeText(context.getApplicationContext(), "Fail to read file", Toast.LENGTH_SHORT).show();
}
}发布于 2021-11-14 13:18:40
您有两个选择。
在清单中请求MANAGE_EXTERNAL_STORAGE。
让用户使用ACTION_OPEN_DOCUMENT选择文件。
https://stackoverflow.com/questions/69963223
复制相似问题