将位图保存到图库并通过本地通知访问它
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将位图保存到图库并通过本地通知访问它相关的知识,希望对你有一定的参考价值。
在一个应用程序中,我正在截取页面内容的屏幕截图,我想将其保存在图库中,创建一个包含图像的本地通知,当用户点击它时,它会打开图像。画廊。
截至目前,我可以拍摄快照并使用以下方法保存:
var path = MediaStore.Images.Media.InsertImage(context.ContentResolver, bitmap, "TestImage.png", "Snapshot taken");
我对这种方法有一些问题,我可以在Gallery的Pictures文件夹中看到图像,但名称不是我在本例中指定的名称“TestImage.png”。此外,从此调用返回的路径具有URI方案“content:// ...”。
之后,我使用嵌入图像使用NotificationCompat.Builder创建本地通知,它运行良好。但是当我尝试将PendingIntent添加到它来打开图像时,我遇到了从InsertImage调用返回的路径的问题。返回的路径是:content:// media / external / images / media / 1292
我试过这个:
var path = FileProvider.GetUriForFile(CrossCurrentActivity.Current.AppContext, "com.myapp.fileprovider", new File(path));
但它不起作用,我得到一个例外:Java.Lang.IllegalArgumentException:找不到包含/ content的配置根:/ media / external / images / media / 1292
我也试过这个:
global::android.Net.Uri.FromFile(new File(path)), "image/*")
但我收到另一个例外:Android.OS.FileUriExposedException:file:/// content%3A / media / external / images / media / 1292通过Intent.getData()暴露在app之外
这是我用来创建通知的代码:
NotificationCompat.BigPictureStyle picStyle = new NotificationCompat.BigPictureStyle();
picStyle.BigPicture(bitmap);
picStyle.SetSummaryText("The snapshot has been saved to your library");
const int pendingIntentId = 0;
PendingIntent pendingIntent =
PendingIntent.GetActivity(CrossCurrentActivity.Current.Activity, pendingIntentId,
new Intent().SetAction(Intent.ActionView)
.SetDataAndType(global::Android.Net.Uri.FromFile(new File(path)), "image/*"), PendingIntentFlags.OneShot);
NotificationCompat.Builder builder = new NotificationCompat.Builder(CrossCurrentActivity.Current.AppContext, "UniqueID")
.SetContentIntent(pendingIntent)
.SetContentTitle("Security center")
.SetContentText("The snapshot has been saved to your library")
.SetSmallIcon(Resource.Drawable.ic_notification);
builder.SetStyle(picStyle);
Notification notification = builder.Build();
NotificationManager notificationManager =
CrossCurrentActivity.Current.Activity.GetSystemService(Context.NotificationService) as NotificationManager;
const int notificationId = 0;
notificationManager.Notify(notificationId, notification);
您是否知道我如何使用正确的名称在Public Gallery文件夹中保存图像然后在PendingIntent中访问本地通知?
谢谢你们 !
好吧,经过几个小时的试验和错误后,我发现了问题,在解析从MediaStore.Images.Media.InsertImage返回的路径时,我不得不使用global :: Android.Net.Uri.Parse()而不是Uri.FromFile(),后者仅在您的路径具有URI方案“file://”时使用。通过这样做,我能够使ContentIntent在本地通知上工作。现在唯一的问题是不受尊重的文件的名称。
以上是关于将位图保存到图库并通过本地通知访问它的主要内容,如果未能解决你的问题,请参考以下文章
React-native-android - 如何将图像保存到Android文件系统并在手机的“图库”中查看