Xamarin.forms 如何在下载图像时立即打开图像

Xamarin.forms 如何在下载图像时立即打开图像,xamarin.forms,domdocument,Xamarin.forms,Domdocument,我正在为android和iOS应用程序使用xamarin.forms。在这里,我可以通过为应用程序创建个人文件夹来保存图像和文档。但要求是,图像/文档下载后,应自动打开,而无需手动转到该文件夹。android和iOS如何做到这一点 保存图像/文档 对于android: byte[] respuesta = Android.Util.Base64.Decode(fileBytes, Android.Util.Base64.Default); System.IO

我正在为android和iOS应用程序使用xamarin.forms。在这里,我可以通过为应用程序创建个人文件夹来保存图像和文档。但要求是,图像/文档下载后,应自动打开,而无需手动转到该文件夹。android和iOS如何做到这一点

保存图像/文档 对于android:

  byte[] respuesta = Android.Util.Base64.Decode(fileBytes, Android.Util.Base64.Default);

                System.IO.File.WriteAllBytes(fileFullPath, respuesta);   
在iOS中:

if (extension.ToLower() == ".pdf")
            {

                byte[] encodedDataAsBytes = DecodeUrlBase64(DataString);

                string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);

                string finalPath = Path.Combine(documentsPath, Path.GetFileName(fileFullPath));

                File.WriteAllBytes(finalPath, encodedDataAsBytes);
            }

            if(extension.ToLower() == ".png" || extension.ToLower() == ".jpg" || extension.ToLower() == ".jpeg" || extension.ToLower() == ".gif")
            {
                byte[] encodedDataAsBytes = System.Convert.FromBase64String(DataString);

                NSData data = NSData.FromArray(encodedDataAsBytes);

                var someImage= UIImage.LoadFromData(data);

                someImage.SaveToPhotosAlbum((image, error) =>
                {
                    var o = image as UIImage;
                    Console.WriteLine("error: " + error);
                });
            }

您可以使用
DependencyService
获取字节数组,将其显示到图像控件中,如下所示:

var stream = new MemoryStream(DependencyService.Get<IGetBytesImagesService>().GetBytes(filePath));
yourImage.Source = ImageSource.FromStream(() => stream);
在您的核心项目中:

public interface IGetBytesImagesService
{
    byte[] GetBytes(string path);
}
在您的Android项目中:

[assembly: Dependency(typeof(GetBytesImagesService))]
public class GetBytesImagesService : IGetBytesImagesService
{
    public async byte[] GetBytes(string path)
    {
         return File.ReadAllBytes(filePath);;
    }
}
在iOS项目中:

[assembly: Dependency(typeof(GetBytesImagesService))]
public class GetBytesImagesService : IGetBytesImagesService
{
    public async byte[] GetBytes()
    {
         return File.ReadAllBytes(filePath);
    }
}
现在,在
xaml.cs
文件中,您可以将此字节数组设置为
Image.Source
,如下所示:

var stream = new MemoryStream(DependencyService.Get<IGetBytesImagesService>().GetBytes(filePath));
yourImage.Source = ImageSource.FromStream(() => stream);
var stream=newmemoryStream(DependencyService.Get().GetBytes(filePath));
yourmage.Source=ImageSource.FromStream(()=>stream);

在Android中:首先,您必须从存储在Android设备的私人文件夹中的文件路径获取文件

File file = new File(getFilesDir().getAbsolutePath(), "fileName.png");
然后要使用它,您必须将其转换为URI路径,如下所示

Uri contentUri = FileProvider.getUriForFile(DownloadShareActivity.this, SHARED_PROVIDER_AUTHORITY, file);

感谢您的帮助,但我想从文件夹中打开它,例如,我的文档将存储在
/Users/UserName/Library/Developer/CoreSimulator/Devices/A3BC6BE2-8CEB-489F-91A4-72362B7DFB7E/data/Containers/data/Application/AB45DR45-3166-48C1-B26E-CC74B62FB70C/documents/send.png中“
,因此,当下载完成时,该文件夹中的文件应该打开。我尝试过使用
Device.OpenUri(“/Users/UserName/Library/Developer/CoreSimulator/Devices/A3BC6BE2-8CEB-489F-91A4-72362B7DFB7E/data/Containers/data/Application/AB45DR45-3166-48C1-B26E-CC74B62FB70C/Documents/send.png”)
但没有指向该文件夹的导航。是否要在应用程序中显示?或者您想使用gallery显示您的图像?如果您想在应用程序中显示它,只需使用以下命令:
byteArray=System.IO.File.ReadAllBytes(您的路径)
并返回byteArray以将其显示到图像控件中。图像将下载到库中。所以,我想要的是,在图像保存到图库后,应用程序必须导航到图库,用户应该可以看到他们下载的图像。谢谢,@Mike,我会检查一下。