【问题标题】:Xamarin.Android Save Image to Gallery Photo AlbumXamarin.Android 将图像保存到图库相册
【发布时间】:2019-06-11 17:47:12
【问题描述】:

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

图库->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);

        }

我希望有人能告诉我我错过了什么?

附: 我尝试使用 MediaStore,但它始终保存在图片文件夹中,并且没有重载来更改它。

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

【问题讨论】:

    标签: android xamarin xamarin.android


    【解决方案1】:

    我已经重写了您的函数以提供该功能。关键区别在于文件夹的创建方式。此外,我对媒体扫描仪使用 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);
    
    }
    

    希望这会有所帮助!

    【讨论】:

    • Intent.ActionMediaScannerScanFile 不适用于 android sdk 10+ 我想可能是 11,不确定。
    猜你喜欢
    • 2014-08-28
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多