新建项目
- 打开Visual Stuido for Mac,选择“文件”>“新建解决方案...”或按“新建项目...”按钮,然后选择“多平台”>“应用”>“空白窗体应用” :
![50b817591774a00dca46ba8575e8f399.png](https://i-blog.csdnimg.cn/blog_migrate/57170d756933b181971f172c64416382.jpeg)
新建项目
![843678fd8dcd7113422e08111918a215.png](https://i-blog.csdnimg.cn/blog_migrate/fd13002b42159865605a27211b6cd58f.jpeg)
设置项目名称和目标平台
- 还原项目缺失的包
![1e5465c3d85a9c7b875c299bce945f27.png](https://i-blog.csdnimg.cn/blog_migrate/0cecc753f5455904ab4d312adc4b43f2.jpeg)
还原缺失的包
- 在Kubim项目上面添加 "Xam.Plugin.Media"包
![c13b5a1aaa0f20766041014af5728b53.png](https://i-blog.csdnimg.cn/blog_migrate/c9aeaa549f73894af866562825a4f6bc.jpeg)
添加视频包文件
构建Xamarin.Forms 代码
- View: 设置Xamarin.Forms Xaml 页面,在页面添加一个 Button 和 Image 控件。
<?xml version="1.0" encoding="UTF-8"?>#2196F3#96d1ff#999999
- ViewModel:
public class CamaraViewModel : BaseViewModel { //拍照 public ICommand TakeCommand { get; set; } //图片 private ImageSource image; public ImageSource ImageSource { get { return image; } set => SetProperty(ref image, value); } public CamaraViewModel() { Title = "Camara"; TakeCommand = new Command(async () => await TakePhoto()); } //拍照 async Task TakePhoto() { var media = CrossMedia.Current; //判断摄像头 if (!media.IsCameraAvailable || !media.IsTakePhotoSupported) { return; } // 检查照相机和存储权限,没有的话进行一次请求 var cameraStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera); var storageStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage); if (cameraStatus != PermissionStatus.Granted || storageStatus != PermissionStatus.Granted) { var results = await CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Camera, Permission.Storage }); cameraStatus = results[Permission.Camera]; storageStatus = results[Permission.Storage]; } //获取文件 var file = await media.TakePhotoAsync(new StoreCameraMediaOptions() { SaveToAlbum = true //保存到照片库 }); //判断文件是否为空 if (file == null) { return; } //解析图片 ImageSource = ImageSource.FromStream(() => { var stream = file.GetStream(); file.Dispose(); //释放资源 return stream; }); } }
配置Kubim.Android 项目
- 在Android的AssemblyInfo.cs中声明权限信息
[assembly: UsesPermission(Android.Manifest.Permission.Internet)][assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)][assembly:UsesPermission(Android.Manifest.Permission.ReadExternalStorage)][assembly: UsesFeature("android.hardware.camera", Required = false)][assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]
- 在Android的Resource 下面添加 XML文件
![46b70009b742ef9e5e15a7a89ef1ddf3.png](https://i-blog.csdnimg.cn/blog_migrate/64e5e80754ca263d31bd28e9775bc625.jpeg)
添加xml 文件
<?xml version="1.0" encoding="UTF-8" ?>
- 在Android的AndroidManifest.xml中的application节点下添加provider 节点。
<?xml version="1.0" encoding="utf-8"?>
- 在Android的MainActivity.cs中初始化
![91046befc5d8c9d91fcbd99695c4c9e5.png](https://i-blog.csdnimg.cn/blog_migrate/b426dcfcc4a5cb46a3ff07c213cdda78.jpeg)
设置初始化
调试应用程序及最终效果
![1bcbe46f4fdb39a1bd597045f774e9f5.gif](https://i-blog.csdnimg.cn/blog_migrate/30a464ba4176df3541053eee0cd6fcf6.gif)
Android 模拟器