首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xamarin.Forms将图像移动到Android 12及以上的图库。

Xamarin.Forms将图像移动到Android 12及以上的图库。
EN

Stack Overflow用户
提问于 2022-10-14 18:26:35
回答 1查看 74关注 0票数 1

我知道这很容易拍一张照片并把它保存到画廊。

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
/storage/emulated/0/Android/data/com.companyname.appname/files/Pictures/MyAlbum/photo_18_47_29_69.jpg

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

第一次尝试

代码语言:javascript
运行
复制
File.WriteAllBytes("/storage/emulated/0/Android/data/com.companyname.appname/files/Pictures/MyAlbum/downloaded_image_223213a3as.jpg", immageBytes);
MediaScannerConnection.ScanFile(Application.Context, new string[] { path },null,null);

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

代码语言:javascript
运行
复制
    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);
EN

回答 1

Stack Overflow用户

发布于 2022-10-14 18:38:43

更新:

基本上,您需要使用这个方法并保存它。

代码语言:javascript
运行
复制
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回答:

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

代码语言:javascript
运行
复制
MediaStore.Images.Media.InsertImage(Activity.ContentResolver, ImgBitmap, yourTitle , yourDescription);

希望这会有所帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74073402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档