我正在使用xamarin.android创建一个Android应用程序,其中targetsdk是Marshmallow。
我正在使用SAF写入外部SD卡(可移动媒体),为此我使用ACTION_OPEN_DOCUMENT_TREE调用Intent
var intent = new Intent(Intent.ActionOpenDocumentTree);
StartActivityForResult(intent, ACTION_OPEN_DOCUMENT_TREE);
我已经将该树uri保存在SharedPreference上以获得长期许可,直到我的设备重新启动,如
treeUri.ToString()
并阅读uri like
var str = Android.Net.Uri.Decode(UriString);
var TreeUri = Android.Net.Uri.Parse(str);
并将此TreeUri解析为DocumentFile类以管理文档,但有时它会错过uri的某些部分,我需要再次调用它以授予用户管理文档的权限并再次保存treeuri。
正如我们在ES文件资源管理器中可以看到的那样,它还要求用户授予权限并保持树库,直到设备重新启动。
这是ES文件资源管理器的图像
在设备重新启动之前,请纠正我如何维护树uri。
编辑: 这是TakePersistableUriPermission代码:
var takeFlags = ActivityFlags.GrantReadUriPermission | ActivityFlags.GrantWriteUriPermission;
GrantUriPermission(PackageName, data.Data, takeFlags);
ContentResolver.TakePersistableUriPermission(data.Data, takeFlags);