【问题标题】:how to save photo from image view to gallerry android xamarin如何将照片从图像视图保存到画廊 android xamarin
【发布时间】:2021-10-24 09:21:51
【问题描述】:

你好,我是 xamarin 的新手,我试图找到很多互联网代码,但它不起作用。

在我的图像视图中有点菜单,当用户点击图像视图中的菜单时,他们可以转发照片或分享照片但无法保存。

我想在那里添加保存照片功能,但不知道,这是我分享和转发的代码的一部分

public async void OnSelection(MaterialDialog dialog, View itemView, int position, string itemString)
    {
        try
        {
            if (itemString == GetText(Resource.String.Lbl_MessageInfo))
            {
                var intent = new Intent(this, typeof(MessageInfoActivity));
                intent.PutExtra("UserId", Id);
                intent.PutExtra("MainChatColor", !string.IsNullOrEmpty(MesData.ChatColor) ? MesData.ChatColor : AppSettings.MainColor ?? AppSettings.MainColor);
                intent.PutExtra("SelectedItem", JsonConvert.SerializeObject(MesData));
                StartActivity(intent);
            }
            else if (itemString == GetText(Resource.String.Lbl_Forward))
            {
                var intent = new Intent(this, typeof(ForwardMessagesActivity));
                intent.PutExtra("SelectedItem", JsonConvert.SerializeObject(MesData));
                StartActivity(intent);
            }
            else if (itemString == GetText(Resource.String.Lbl_Share))
            {
                string urlImage = MediaFile;
                var fileName = urlImage?.Split('/').Last();

                await ShareFileImplementation.ShareRemoteFile(urlImage, urlImage, fileName, GetText(Resource.String.Lbl_SendTo));
            }
            
        catch (Exception e)
        {
            Methods.DisplayReportResultTrack(e);
        }
    }

【问题讨论】:

    标签: java android visual-studio-code xamarin.android android-studio-3.0


    【解决方案1】:

    以下代码在Android10.0(Android Q) 之前使用。

    //get the data 
    ImageView image = FindViewById<ImageView>(Resource.Id.image);
    Bitmap bitmap = ((BitmapDrawable)image.Drawable).Bitmap;
    MemoryStream baos = new MemoryStream();
    bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, baos);
    imageInByte = baos.ToArray();
    
    //store it in gallery
    Java.IO.File storagePath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures);
    string path = System.IO.Path.Combine(storagePath.ToString(), "abc.png");
    System.IO.File.WriteAllBytes(path, imageInByte);
    var mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
    mediaScanIntent.SetData(Android.Net.Uri.FromFile(new Java.IO.File(path)));
    this.SendBroadcast(mediaScanIntent);
    

    但是,GetExternalStoragePublicDirectory 已被Android Q 弃用,似乎由于Android 11 我们无法将文件写入包括图库在内的公共外部存储,因此只能将文件放置在应用程序自己的隔离共享存储中。

    参考文档: https://developer.android.com/reference/android/os/Environment#getExternalStoragePublicDirectory(java.lang.String).

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2016-08-06
      相关资源
      最近更新 更多