Xamarin.Essentials 共享可绘制对象

Posted

技术标签:

【中文标题】Xamarin.Essentials 共享可绘制对象【英文标题】:Xamarin.Essentials Share drawable 【发布时间】:2021-06-06 10:58:18 【问题描述】:

我正在尝试共享位于 android 的 Resources/Drawables 文件夹中的本地图像。 我正在使用 Xamarin 和 Xamarin.Essentials 插件。 于是就有了这个功能:

await Share.RequestAsync(new ShareFileRequest

Title = Title,
File = new ShareFile(file)
);

所以对于文件,我需要从可绘制文件夹到文件的路径。 我已经尝试了很多变化。 例如:

var file = Android.Net.Uri.Parse("android.resource://" + Android.App.Application.Context.PackageName + "/" + Resource.Drawable.image).Path;

但我总是收到一个错误,即找不到文件。 我做错了什么? 提前致谢

【问题讨论】:

资源没有文件路径。您需要将其从资源复制到文件夹 我可以在没有额外权限的情况下执行此操作吗? 【参考方案1】:

因为资源没有文件路径,正如@Jason 所说,我将图像保存在另一个可访问的文件中。 所以我不知道这是否是最好的解决方案,但它对我有用:

        Drawable drawable = ResourcesCompat.GetDrawable(Resources, Resource.Drawable.image, null);
        Bitmap bitmap = ((BitmapDrawable)drawable).Bitmap;
        byte[] imgByteArray;
        using (var stream = new MemoryStream())
        
            bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
            imgByteArray = stream.ToArray();
        

        var file = System.IO.Path.Combine(FileSystem.CacheDirectory, "share.png");
        File.WriteAllBytes(file, imgByteArray);
        await Share.RequestAsync(new ShareFileRequest
        
            Title = "Share",
            File = new ShareFile(file)
        );

【讨论】:

以上是关于Xamarin.Essentials 共享可绘制对象的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Essentials教程安全存储SecureStorage

Xamarin Essentials教程屏幕常亮ScreenLock

Xamarin.Forms - 使用 Xamarin.Essentials 在两个坐标之间获取里程

有没有办法通过 shareName 获取 Xamarin.Essentials.Preferences

Xamarin Essentials教程振动Vibration

Xamarin表单属性VS Xamarin Essentials首选项