首页 > 解决方案 > 在 Xamarin.Forms Android API 29 中的图库中显示图片

问题描述

我为 Xamarin.Forms(Android、iOS 和 UWP)创建了一个示例。

最低版本:Android 9.0 API 28

目标版本:Android 10.0 API 29

我使用 nuget 包“Xamarin.Controls.SignaturePad.Forms”来创建 SignaturePad。这可行,但我在平板电脑的图库中看不到保存的图片(带有 Android 10.0 API 29 的平板电脑),但图片位于com.sample\files\pictures下。

为什么图片没有显示在平板电脑的图库中?

从 SignaturePad 获取图像

 Stream signatureImage = await ((SignaturePad.Forms.SignaturePadView)pParameter).GetImageStreamAsync(SignaturePad.Forms.SignatureImageFormat.Png, Color.Black, Color.White);

 if (signatureImage != null)
 {
    DependencyService.Get<IMediaService>().SavePictureToDisk("currentSignature3.png",((MemoryStream) signatureImage).ToArray());
 }

来自 Android 的 DpendencyService

public class MediaService : IMediaService
{
    Context CurrentContext => CrossCurrentActivity.Current.Activity;

    public void SavePictureToDisk(string pFileName, byte[] pImageData)
    {           
        //"/storage/emulated/0/Android/data/com.sample/files/Pictures/currentSignature3.png"
        var externalfilePath = CurrentContext.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).AbsolutePath;           
        var filePath = Path.Combine(externalfilePath, pFileName);

        System.IO.File.WriteAllBytes(filePath, pImageData);

        if (File.Exists(filePath))
        {                
            MediaScannerConnection.ScanFile(CurrentContext, new String[] { filePath }, null, null);

            Console.WriteLine("File exists");
        }
        else
        {
            Console.WriteLine("File error");
        }
    }      
}

MediaScannerConnection.ScanFile 是否应该将图片添加到图库中?我添加了所有权限,因为文件已创建。

标签: c#androidimagexamarin.formsandroid-10.0

解决方案


推荐阅读