使用Xamarin.Forms和Prism打开相机时出错

使用Xamarin.Forms和Prism打开相机时出错,xamarin,xamarin.forms,android-camera,prism,Xamarin,Xamarin.forms,Android Camera,Prism,代码隐藏 async Task BtnCameraEvento() { try { await CrossMedia.Current.Initialize(); //Verifica se a camera está disponivel if (!CrossMedia.Current.IsTakePhotoSupported || !CrossMedia.Current.IsCam

代码隐藏

async Task BtnCameraEvento() { try { await CrossMedia.Current.Initialize(); //Verifica se a camera está disponivel if (!CrossMedia.Current.IsTakePhotoSupported || !CrossMedia.Current.IsCameraAvailable) { await App.Current.MainPage.DisplayAlert("Aviso", "Nenhuma camera detectada", "OK"); return; } //tira a foto var file = await CrossMedia.Current.TakePhotoAsync( new StoreCameraMediaOptions { SaveToAlbum = false, Directory = "Demo", Name = "foto" }); //Verifica se foi tirado alguma foto if (file == null) return; //Adiciona a foto a lista de imagens _imageList.Add(file.Path); } catch (Exception ex) { int x = 1; } } 异步任务BtnCameraEvento() { 尝试 { 等待CrossMedia.Current.Initialize(); //验证一个摄像头的显示级别 如果(!CrossMedia.Current.IsTakePhotoSupported | |!CrossMedia.Current.IsCameraAvailable) { 等待App.Current.MainPage.DisplayAlert(“Aviso”、“Nenhuma camera detectada”、“OK”); 返回; } //提拉福托 var file=await CrossMedia.Current.TakePhotoAsync( 新店面摄影选择 { SaveToAlbum=false, Directory=“Demo”, Name=“foto” }); //请确认您是否喜欢alguma foto if(file==null) 返回; //阿迪西奥纳·福托·阿列斯塔·德·伊曼斯 _Add(file.Path); } 捕获(例外情况除外) { int x=1; } } “CrossMedia.Current.TakePhotoAsync”行中出现以下错误:

“无法获取文件位置。这很可能意味着您的Android清单文件中未设置文件提供程序信息。请查看有关如何在项目中设置此信息的文档。”


请特别参阅Sushingover链接的文档的这一部分:

在此处复制,以防链接断开:

Android

async Task BtnCameraEvento() { try { await CrossMedia.Current.Initialize(); //Verifica se a camera está disponivel if (!CrossMedia.Current.IsTakePhotoSupported || !CrossMedia.Current.IsCameraAvailable) { await App.Current.MainPage.DisplayAlert("Aviso", "Nenhuma camera detectada", "OK"); return; } //tira a foto var file = await CrossMedia.Current.TakePhotoAsync( new StoreCameraMediaOptions { SaveToAlbum = false, Directory = "Demo", Name = "foto" }); //Verifica se foi tirado alguma foto if (file == null) return; //Adiciona a foto a lista de imagens _imageList.Add(file.Path); } catch (Exception ex) { int x = 1; } } 需要“写入外部存储”和“读取外部存储”权限,但库会自动为您添加此权限。此外,如果您的用户正在运行棉花糖,插件将自动提示他们获得运行时权限。您必须将权限插件代码添加到主活动或基本活动中:

添加到活动中:

安卓当前活动设置

此插件使用当前活动插件访问当前Android活动。如果MainApplication.cs文件未自动添加到应用程序中,请确保完成完整设置。请全面阅读当前的活动插件文档。您必须至少在活动的OnCreate方法中设置以下内容:

强烈建议您使用当前活动插件文档中概述的自定义应用程序]()

安卓杂项设置

通过添加这些权限,Google Play将自动过滤掉没有特定硬件的设备。您可以通过将以下内容添加到Android项目中的AssemblyInfo.cs文件来解决此问题:

安卓文件提供商设置

您还必须添加一些额外的配置文件以遵守新的严格模式:

1.)将以下内容添加到


您是否在AndroidManifest.xml中设置了权限?请查看有关如何在项目中设置权限的文档。:是否可以显示AndroidManifest文件?
CrossCurrentActivity.Current.Init(this, bundle);
[assembly: UsesFeature("android.hardware.camera", Required = false)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]
<provider android:name="android.support.v4.content.FileProvider" 
      android:authorities="${applicationId}.fileprovider" 
      android:exported="false" 
      android:grantUriPermissions="true">

      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" 
                 android:resource="@xml/file_paths"></meta-data>
</provider>
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-files-path name="my_images" path="Pictures" />
    <external-files-path name="my_movies" path="Movies" />
</paths>