不支持的OperationException:不支持的Uri内容



我有一个activity/intent启动器,用户可以从外部存储中选择一个目录。选择文件夹后,uri路径存储在共享引用中,文件夹名称显示在文本视图中:

ActivityResultLauncher<Intent> actResLauncher;
actResLauncher = registerForActivityResult(   new ActivityResultContracts.StartActivityForResult(),this);
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);   
actResLauncher.launch(intent);

@Override
public void onActivityResult(ActivityResult result) {
int resultCode = result.getResultCode();
Intent resultIntent = result.getData();
if (resultCode == Activity.RESULT_OK && resultIntent != null) {
Uri uri = resultIntent.getData();

//Safe Uri "path" to shared preference
SharedPreferences.Editor editor = getContext().getSharedPreferences(AppConstants.BACKUP, MODE_PRIVATE).edit();
editor.putString(AppConstants.AUTOMATIC_BACKUP_FOLDER, uri.toString());
editor.commit();

//Display Folderdame on textview
DocumentFile documentFile = DocumentFile.fromTreeUri(getContext(), uri);
automaticBackupFolder.setText(documentFile.getName());
)
}

这就像魅力一样,可以从共享首选项文件夹中恢复Uri:

SharedPreferences prefs = getContext().getSharedPreferences(AppConstants.BACKUP, MODE_PRIVATE);
DocumentFile sourceFile = DocumentFile.fromSingleUri(getContext(), Uri.parse(prefs.getString(AppConstants.AUTOMATIC_BACKUP_FOLDER)));
automaticBackupFolder.setText(sourceFile.getName()); //Throws UnsupportedOperationException: Unsupported Uri content exception

使用DocumentFile对象,我可以获得父文件,检查文件夹是否存在等,这非常有效。然而,问题是,当重新创建片段时(例如,通过旋转手机(,函数getPath()抛出以下异常:UnsupportedOperationException: Unsupported Uri content

在onActivityResult函数中显示文件夹名称时不会出现此错误,当Uri存储在Shared Preferences Folder中时会出现此错误AND碎片会再次创建(例如旋转电话(

问题可能是什么?是不是在重新创建片段后,应用程序失去了查看文件夹名称的权限?

onActivityResult()中,当您获得Uri时,在ContentResolver上调用takePersistableUriPermission(),传入您的Uri。否则,您对内容的访问仅限于获得Uri的任何活动实例,并且在流程终止时完全消失。

相关内容

  • 没有找到相关文章

最新更新