Открыть поток на выбранном Uri без использования StartActivity - PullRequest
0 голосов
/ 06 ноября 2019

Этот код относится к 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;
        }
    }
...