首页 > 解决方案 > 在不使用 StartActivity 的情况下在选择的 Uri 上打开 Stream

问题描述

此代码来自 Xamarin.Forms 项目的 Android 端。我有一个成功选择的文件的 uri 和一个从 uri 创建的流。稍后我想再次从 uri 中读取流,绕过所有挑选的东西,直接进入流。下面的代码有效,但 StartActivity(intent) 会打开一个不想要的文件所在的选择屏幕。

如果我理解正确,您只能在活动上下文中获得“content://”uri 的许可。所以问题是,有没有办法创建一个不打开屏幕但允许读取文件或获取流的可用活动?我什至会选择一种不同的策略来让流脱离“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;
        }
    }

标签: androidfileandroid-activityxamarin.formsuri

解决方案


推荐阅读