Xamarin.Android将图像保存到图库相册

时间:2019-06-10 13:49:06

标签: android xamarin xamarin.android

我需要使用我的应用程序名称作为相册将位图保存到图库。路径应为:

图库-> MyAppName-> test.png

但是我得到的最好结果是:

图库->其他-> MyAppName-> test.png

这是我的代码:

using Android.Graphics;
using Android.Media;
using System;
using System.IO;
..
.
.

        public   static  void ExportBitmapAsPNG(Bitmap bitmap)
        {
            var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath+"/MyAppName";
            if (!Directory.Exists(sdCardPath))
                Directory.CreateDirectory(sdCardPath);

            var filePath = System.IO.Path.Combine(sdCardPath, "test.png");
            var stream = new FileStream(filePath, FileMode.Create);
            bitmap.Compress(Bitmap.CompressFormat.Png, 100, stream);
            stream.Close();
            MediaScannerConnection.ScanFile(Android.App.Application.Context, new string[] { filePath }, null, null);

        }

我希望有人能告诉我我想念的东西吗?

P.S。 我尝试使用MediaStore,但它始终保存在Picture文件夹中,并且没有重载来更改此设置。

Android.Provider.MediaStore.Images.Media.InsertImage(ContentResolver, bitmap2, "test", "");

1 个答案:

答案 0 :(得分:0)

我已经重写了您的功能以提供该功能。关键区别在于创建文件夹的方式。此外,我将Intent用于介质扫描仪。无论如何,我认为这应该可以让您到达想要的位置。希望这会有所帮助!

public void ExportBitmapAsPNG(Bitmap bitmap) {

    // Get/Create Album Folder To Save To
    var jFolder = new Java.IO.File(Environment.GetExternalStoragePublicDirectory(Environment.DirectoryPictures), "MyAppNamePhotoAlbum");
    if (!jFolder.Exists())
        jFolder.Mkdirs();

    var jFile = new Java.IO.File(jFolder, "MyPhoto.jpg");

    // Save File
    using (var fs = new FileStream(jFile.AbsolutePath, FileMode.CreateNew)) {
        bitmap.Compress(Bitmap.CompressFormat.Png, 100, fs);
    }

    // Save Picture To Gallery
    var intent = new Intent(MediaStore.ActionImageCapture);
    intent.PutExtra(MediaStore.ExtraOutput, Android.Net.Uri.FromFile(jFile));
    StartActivityForResult(intent, 0);

    // Request the media scanner to scan a file and add it to the media database
    var f = new Java.IO.File(jFile.AbsolutePath);
    intent = new Intent(Intent.ActionMediaScannerScanFile);
    intent.SetData(Android.Net.Uri.FromFile(f));
    Application.Context.SendBroadcast(intent);

}

希望这会有所帮助!