【问题标题】:How to give permissions to xamarin camera如何授予xamarin相机权限
【发布时间】:2018-08-16 13:05:58
【问题描述】:

我想将相机添加到我的 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

【问题讨论】:

  • 我在 MainActivity.cs 上添加了这段代码。但我仍然得到同样的权限错误。
  • 您是否在 Android Manifest 中启用了相机?
  • Yes camera 复选框也被勾选了。

标签: android forms xamarin permissions camera


【解决方案1】:

将此行添加到 Android 中的 MainActivity

CrossCurrentActivity.Current.Init(this, savedInstanceState);

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

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

【讨论】:

    【解决方案2】:

    我也有例外需要相机权限。尝试将以下代码添加到 MainActivityOnCreate() 方法。它应该向用户询问相机权限——你应该在设备上看到警报

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

    并将以下内容放入 android manifest(或选中复选框)

    <uses-permission android:name="android.permission.CAMERA" />
    

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

    【讨论】:

    • 上面的代码我已经放好了。我收到错误“使用未分配的局部变量'requestPermissions'”。这个变量需要先声明任何值吗?
    • 我添加了上面的代码。我第一次看到警报消息,我单击是,但仍然抛出相同的权限错误
    • 我已添加链接,您可以在其中下载文件查看错误。
    • 您只看到过一次,因为现在它已启用(您可以在您的设备中看到有关您应用程序的详细信息)。不确定但尝试添加 - &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;
    • 仍然显示同样的错误。它只是一个演示文件。如果我可以和你分享;你有机会亲眼看看吗?
    【解决方案3】:

    简短回答: 从 Settings->Apps->YOUR_APP_NAME->Permissions 检查权限是否已授予应用程序。

    长答案: 我注意到的是,即使使用其他答案中的信息,我仍然会遇到同样的错误,所以我在 Settings->Apps->YOUR_APP_NAME->Permissions 中检查了应用程序的权限,我看到即使我获得了相机访问权限弹出窗口出现时的应用程序,在这里我仍然没有授予该应用程序的权限。所以在我从这里打开权限后一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多