如何授予Xamarin相机权限

时间:2018-08-16 13:05:58

标签: android forms xamarin permissions camera

我想将相机添加到我的xamarin表单应用程序中。我看了这部影片。 https://www.youtube.com/watch?v=DJYLrVNY2ak&t=645s

完成所有工作后,出现权限错误。

错误说:

未处理的异常: Plugin.Media.Abstractions.MediaPermissionException:需要摄像机许可

此代码位于MainPage.xaml.cs

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Plugin.Media.Abstractions;
using Plugin.Media;
using Plugin.Permissions;
using Plugin.Permissions.Abstractions;

namespace camera
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private async void Button_Clicked(object sender, EventArgs e)
        {


            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsCameraAvailable
                || !CrossMedia.Current.IsTakePhotoSupported)
            {
                await DisplayAlert("No Camera", "No Camera available", "Ok");
                return;
            }

            var file = await CrossMedia.Current.TakePhotoAsync(

                new StoreCameraMediaOptions
                {

                    SaveToAlbum = true,

                });

            if (file == null)
                return;

            PathLabel.Text = file.AlbumPath;

            MainImage.Source = ImageSource.FromStream(() =>
            {
                var stream = file.GetStream();
                file.Dispose();
                return stream;


            });




        }
    }
}

此代码位于MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:camera"
             x:Class="camera.MainPage">

    <StackLayout>
        <!-- Place new controls here -->
        <Label Text="Welcome to Xamarin.Forms!" 
           HorizontalOptions="Center"
           VerticalOptions="CenterAndExpand" />

        <Button Text="Take a Photo"
                Clicked="Button_Clicked">

        </Button>

        <Image x:Name="MainImage"></Image>
        <Label x:Name="PathLabel"></Label>


    </StackLayout>

</ContentPage>

模拟器打开正常。当我单击“拍摄照片”按钮时。我收到权限错误。

这是错误图像。 Error image

这里是文件链接。您可以下载文件并查看错误。 我想要这个应用程序要做的就是记录一些细节,拍照并保存图片。 链接到文件 https://contedia-my.sharepoint.com/personal/muhammad_ikram_contedia_com/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fmuhammad%5Fikram%5Fcontedia%5Fcom%2FDocuments%2FPhotos%20%282%29%2Ezip&parent=%2Fpersonal%2Fmuhammad%5Fikram%5Fcontedia%5Fcom%2FDocuments&slrid=6f5b859e-50d6-0000-25d8-0fa7f8d3f9ce

3 个答案:

答案 0 :(得分:0)

我也有例外,需要相机许可。尝试将以下代码添加到{$link->getPageLink('cart', true, NULL, 'add=1&id_product=1&ipa=1&token='|cat:$static_token, false)|escape:'html':'UTF-8'}MainActivity方法中。它应该询问用户摄像机的权限–您应该在设备上看到警报

OnCreate()

然后将以下内容放入android清单(或选中复选框)

        int requestPermissions;
        string cameraPermission = Android.Manifest.Permission.Camera;

        if (!(ContextCompat.CheckSelfPermission(this, cameraPermission) == (int)Permission.Granted))
        {
            ActivityCompat.RequestPermissions(this, new String[] { cameraPermission, }, requestPermissions);
        }

也许以下链接也可能有帮助- https://docs.microsoft.com/cs-cz/xamarin/android/app-fundamentals/permissions?tabs=vswin

答案 1 :(得分:0)

简短答案: 通过“设置”->“应用”->“ YOUR_APP_NAME”->“权限”检查是否已将权限授予该应用。

长答案: 我注意到甚至使用其他答案中的信息,我仍然遇到相同的错误,因此我在“设置”->“应用程序”->“ YOUR_APP_NAME”->“权限”中检查了该应用程序的权限,即使我被授予了摄像头访问权限,弹出窗口时显示的应用程序,这里我仍然没有授予该应用程序任何权限。因此,从这里打开许可后,一切都正常。

答案 2 :(得分:0)

将此行添加到Android中的MainActivity

CrossCurrentActivity.Current.Init(this, savedInstanceState);

将这些行添加到您的代码AsseblyInfo

[assembly: UsesFeature("android.hardware.camera", Required = false)] [assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]