Этот код относится к Android-версии проекта Xamarin.Forms. У меня успешно выбран URI файла и создан поток из URI. Позже я захочу снова прочитать поток из uri, минуя все вещи по сбору и просто направляясь прямо к потоку. Приведенный ниже код работает, НО StartActivity (намерение) открывает экран выбора, где находится файл, который является нежелательным.
Если я правильно понимаю, вы можете получить разрешение только на URI "content: //" в контексте действия. Таким образом, вопрос заключается в том, существует ли способ создать работоспособное действие, которое не открывает экран, но дает разрешение на чтение файла или получение потока? Я бы даже согласился на другую стратегию получения потока от "content: //" uri.
public async Task<System.IO.Stream> OpenFile(StorageProfile FileToOpen)
{
if (IOUtil.IsMediaStore(FileToOpen.Path)) //If Path starts with "content"
{
var uri = Android.Net.Uri.Parse(FileToOpen.Path);
var mime = IOUtil.GetMimeType(uri.ToString());
var intent = new Intent();
intent.SetAction(Intent.ActionOpenDocument);
intent.SetDataAndType(uri, mime);
intent.SetFlags(ActivityFlags.NewTask);
this.context.StartActivity(intent);
var contentUri = Android.Net.Uri.Parse(FileToOpen.Path);
System.IO.Stream fileStream = Application.Context.ContentResolver.OpenInputStream(contentUri);
return fileStream;
}
else //There is a real path to work with
{
System.IO.Stream fileStream = System.IO.File.OpenRead(FileToOpen.Path);
return fileStream;
}
}