在android中SAF中保存树uri的正确方法

时间:2018-03-27 18:11:52

标签: android xamarin xamarin.android

我正在使用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);

0 个答案:

没有答案