xamarin - 如何在 Xamarin Forms 上创建图像选择器?
问题描述
有谁知道是否可以制作这样的图像选择器:
我试过以下插件:
https://github.com/jamesmontemagno/MediaPlugin
https://github.com/matheusneder/Xamarin.Forms.ImagePicker
我不想创建能够执行每个操作的按钮,我想要的是用一个按钮来建议使用哪个应用程序。这个有可能?
谢谢。
解决方案
如果要从手机的图片库中挑选一张照片,由于 Xamarin.Forms 不包含此功能,需要使用DependencyService
各个平台的原生 API 来访问。
创建接口: IPhotoPickerService.cs
public interface IPhotoPickerService
{
Task<Stream> GetImageStreamAsync();
}
安卓实现:
MainActivity.cs
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
internal static MainActivity Instance { get; private set; }
... ...
// Field, property, and method for Picture Picker
public static readonly int PickImageId = 1000;
public TaskCompletionSource<Stream> PickImageTaskCompletionSource { set; get; }
protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent)
{
base.OnActivityResult(requestCode, resultCode, intent);
if (requestCode == PickImageId)
{
if ((resultCode == Result.Ok) && (intent != null))
{
Android.Net.Uri uri = intent.Data;
Stream stream = ContentResolver.OpenInputStream(uri);
// Set the Stream as the completion of the Task
PickImageTaskCompletionSource.SetResult(stream);
}
else
{
PickImageTaskCompletionSource.SetResult(null);
}
}
}
}
PhotoPickerService.cs
public class PhotoPickerService : IPhotoPickerService
{
public Task<Stream> GetImageStreamAsync()
{
// Define the Intent for getting images
Intent intent = new Intent();
intent.SetType("image/*");
intent.SetAction(Intent.ActionGetContent);
// Start the picture-picker activity (resumes in MainActivity.cs)
MainActivity.Instance.StartActivityForResult(
Intent.CreateChooser(intent, "Select Photo"),
MainActivity.PickImageId);
// Save the TaskCompletionSource object as a MainActivity property
MainActivity.Instance.PickImageTaskCompletionSource = new TaskCompletionSource<Stream>();
// Return Task object
return MainActivity.Instance.PickImageTaskCompletionSource.Task;
}
}
有关 IOS、UWP 实现照片选择器的更多信息,您可以查看 MS 文章。https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/photo-picker
并从链接下载源文件。https://docs.microsoft.com/zh-cn/samples/xamarin/xamarin-forms-samples/dependencyservice/
推荐阅读
- sharepoint - 在 SPfx 应用程序中获取用户事件的 Microsoft GraphAPI 403 错误
- python - 循环遍历 pandas 数据框列中的列表元素以在新列中返回列表
- angular - 在 ng 服务中找不到模块“@angular/compiler-cli/ngcc”
- r - R commandArgs() 抑制有关参数被忽略的警告
- xml - xmlstarlet 提取以不同值重复的子 HTML 元素的值
- dimension - 继续训练预训练数据时的维度问题
- python - 查找变量的物理内存地址?
- r - 通货膨胀率的时间序列
- javascript - 由于 javascript 是 Ecmascript 的实现,那么这个实现称为“javascript”的规范是什么?
- python - 如何将返回值分配给 __init__ 值