Xamarin.forms Xamarin表单:摄像头和图库在android中不工作,显示权限异常
在我的项目中加载相机和图库时出现以下异常 摄像机 异常:>Plugin.Media.Abstractions.MediaPermissionException:需要摄像头权限。 在Plugin.Media.MediaImplementation+d_u17.MoveNext()[0x0009]处 画廊 未授予存储权限,正在请求。01-02 15:16:08.566 I/mono标准输出(12958):未授予存储权限,正在请求。 存储权限被拒绝。 01-02 15:16:08.567 I/mono标准输出(12958):存储权限被拒绝。[0:]异常:>Plugin.Media.Abstractions.MediaPermissionException:需要存储权限。 在Plugin.Media.MediaImplementation+d__16.MoveNext()[0x00091]中:0 ---来自引发异常的上一个位置的堆栈结束跟踪--- 我已在清单文件中添加了所有权限。Xamarin.forms Xamarin表单:摄像头和图库在android中不工作,显示权限异常,xamarin.forms,permissions,camera,gallery,media,Xamarin.forms,Permissions,Camera,Gallery,Media,在我的项目中加载相机和图库时出现以下异常 摄像机 异常:>Plugin.Media.Abstractions.MediaPermissionException:需要摄像头权限。 在Plugin.Media.MediaImplementation+d_u17.MoveNext()[0x0009]处 画廊 未授予存储权限,正在请求。01-02 15:16:08.566 I/mono标准输出(12958):未授予存储权限,正在请求。 存储权限被拒绝。 01-02 15:16:08.567 I/mono
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
清单文件中的提供商详细信息:
[assembly: UsesFeature("android.hardware.camera", Required = false)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
<provider android:name="android.support.v4.content.FileProvider" android:authorities="{packagename}.fileprovider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
</provider>
public async void OpenMygallery()
{
try
{
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsPickPhotoSupported)
{
ShowAlert("No photos available.");
return;
}
_mediaFile = await CrossMedia.Current.PickPhotoAsync();
if (_mediaFile == null)
return;
tweetPicture.Source = ImageSource.FromStream(() =>
{
return _mediaFile.GetStream();
});
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
}
}
public async void OpenMyCamera()
{
try
{
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
ShowAlert("No camera available.");
return;
}
_mediaFile = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
Directory = "Sample",
Name = "test.jpg",
AllowCropping = true
});
if (_mediaFile == null)
return;
tweetPicture.Source = ImageSource.FromStream(() =>
{
return _mediaFile.GetStreamWithImageRotatedForExternalStorage();
});
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
}
}
错误信息:
[assembly: UsesFeature("android.hardware.camera", Required = false)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
<provider android:name="android.support.v4.content.FileProvider" android:authorities="{packagename}.fileprovider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
</provider>
public async void OpenMygallery()
{
try
{
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsPickPhotoSupported)
{
ShowAlert("No photos available.");
return;
}
_mediaFile = await CrossMedia.Current.PickPhotoAsync();
if (_mediaFile == null)
return;
tweetPicture.Source = ImageSource.FromStream(() =>
{
return _mediaFile.GetStream();
});
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
}
}
public async void OpenMyCamera()
{
try
{
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
ShowAlert("No camera available.");
return;
}
_mediaFile = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
Directory = "Sample",
Name = "test.jpg",
AllowCropping = true
});
if (_mediaFile == null)
return;
tweetPicture.Source = ImageSource.FromStream(() =>
{
return _mediaFile.GetStreamWithImageRotatedForExternalStorage();
});
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
}
}
插件版本号:4.0.1.5
设备测试日期:Redmi Note 5 Pro
VS的版本:15.9.3
Xamarin版本:3.4.0.1008975
任何人请为此提出解决方案?在manifest/info.plist文件中设置权限是第一步,但用户还需要授予这些权限 您可以随时添加权限检查,以确保用户确实允许应用程序访问相机/位置/照片/任何内容
查看有关权限检查和请求的信息。用户需要主动授予应用程序访问这些功能的权限。您尝试过添加权限检查吗?@Tom否,我不尝试这样做,怎么做?查看有关请求权限的信息。@Tom我将尝试此操作并更新您的信息soon@Tom请将其作为您的答案发布,它正在工作