【问题标题】:Xamarin forms Can't Access CameraXamarin 表单无法访问相机
【发布时间】:2018-03-23 14:09:20
【问题描述】:

我的跨平台移动应用正在使用此代码拍照

public void TakePhoto()
        {
            Context context = MainActivity.Instance;
            MainActivity activity = (MainActivity)context;
            Intent intent = new Intent(MediaStore.ActionImageCapture);
            AppCamera._file = new Java.IO.File(AppCamera._dir, String.Format("Photo_{0}.jpg", DateTime.Now.ToString("ddmmyyhhmmss")));
            intent.PutExtra(MediaStore.ExtraOutput, Uri.FromFile(AppCamera._file));
            activity.StartActivityForResult(intent, 1);
        }

我在 Android 4.4 到 7.0 平台上安装了该应用程序,它运行良好。 但它不适用于 Android 版本为 8.1 的谷歌像素手机。

注意:使用依赖服务调用此函数。

Xamarin.Forms.DependencyService.Register<ICameraProvider>();
DependencyService.Get<ICameraProvider>().TakePhoto()

我正在使用 Visual Studio 2017,Xamarin Forms。我的项目构建属性平台目标是最新平台 Android 8.1(Oreo)。

知道问题是什么吗?

【问题讨论】:

  • 你是如何申请权限的?
  • 是的,权限已设置.. 用于读/写和相机
  • 请记住,Android 6.0+需要主动请求权限,manifest权限仅供参考,安装时默认不授予。
  • 在安装应用程序时它不要求任何许可。我在安装后设置权限,从设置->应用程序-> myapp->权限。
  • 在 android mainifest 中设置目标版本覆盖 23。

标签: c# android xamarin


【解决方案1】:

Xamarin 表单无法访问相机

正如 Jesus Angulo 和 SushiHangover 所说,该权限需要用户在运行时在 Android 6.0 及更高版本上批准。这是official documentation,用于请求运行时权限。您还可以参考此 blog 和此 sample 以在 xamarin 中请求运行时权限。

这是一个简单的演示:

        public void TakePhoto()
        {
            if (ContextCompat.CheckSelfPermission(Application.Context, Manifest.Permission.Camera) != (int)Permission.Granted)
            {
                var requiredPermissions = new String[] { Manifest.Permission.Camera };
                var activity = Xamarin.Forms.Forms.Context as Activity;
                ActivityCompat.RequestPermissions(activity, requiredPermissions, 100);
            }    
            while (ContextCompat.CheckSelfPermission(Application.Context, Manifest.Permission.Camera) != (int)Permission.Granted)
            {
                 //waiting user permission
            }    

            //Other code   
            //...
            //... 
        }

而且你还需要在 AndroidManifest.xml 中设置权限,否则会被自动拒绝。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多