Xamarin.Forms 在 Android 12 及更高版本中将图像移动到图库

问题描述 投票:0回答:1

我知道拍照并将其保存到图库很容易。

protected async Task<MediaFile> TakePhoto()
{
    var storageOptions = new StoreCameraMediaOptions()
    {
        SaveToAlbum = true,
        Directory = pictureAlbumName,
        Name = $"test_{DateTime.Now.ToString("HH_mm_ss_ff")}.jpg"
    };

    return await CrossMedia.Current.TakePhotoAsync(storageOptions);
 
}

结果我得到的 URL 如下所示:

/storage/emulated/0/Android/data/com.companyname.appname/files/Pictures/MyAlbum/photo_18_47_29_69.jpg

但是当我尝试从字节保存图像时,它出现在文件夹中,但从未出现在图库中。保存图像后,我当然尝试扫描新创建的路径,但没有效果

第一次尝试

File.WriteAllBytes("/storage/emulated/0/Android/data/com.companyname.appname/files/Pictures/MyAlbum/downloaded_image_223213a3as.jpg", imageBytes);
MediaScannerConnection.ScanFile(Application.Context, new string[] { path },null,null);

第二次尝试使用过时的Android方法

    Java.IO.File storagePath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures);
    string path = System.IO.Path.Combine(storagePath.ToString(), filename);
    System.IO.File.WriteAllBytes(path, imageByte);
    var mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
    mediaScanIntent.SetData(Android.Net.Uri.FromFile(new Java.IO.File(path)));
    CurrentContext.SendBroadcast(mediaScanIntent);
android xamarin xamarin.forms xamarin.android
1个回答
1
投票

更新:

基本上你需要使用这个方法并保存它

private void SaveImageToStorage(Bitmap bitmap)
        {
            Stream imageOutStream;

            if (Build.VERSION.SdkInt >= BuildVersionCodes.Q)
            {

                ContentValues values = new ContentValues();
                values.Put(MediaStore.IMediaColumns.DisplayName,
                "image_screenshot.jpg");
                values.Put(MediaStore.IMediaColumns.MimeType, "image/jpeg");
                values.Put(MediaStore.IMediaColumns.RelativePath,
                Android.OS.Environment.DirectoryPictures + Java.IO.File.PathSeparator + "AppName");

                Android.Net.Uri uri = this.ContentResolver.Insert(MediaStore.Images.Media.ExternalContentUri, values);

                imageOutStream = ContentResolver.OpenOutputStream(uri);

            }
            else
            {

                String imagesDir =Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).ToString() + "/AppName";
                imageOutStream = File.OpenRead(System.IO.Path.Combine(imagesDir, "image_screenshot.jpg"));
            }


            bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, imageOutStream);
            imageOutStream.Close();

        }

OG 答案:

据我所知,只有媒体商店提供商中的图像对您的画廊可见,要将其添加到媒体商店,您需要使用以下命令:

MediaStore.Images.Media.InsertImage(Activity.ContentResolver, ImgBitmap, yourTitle , yourDescription);

希望这有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.