C# Xamarin表单可以';t通道摄像机
我的跨平台移动应用程序正在使用此代码拍照C# Xamarin表单可以';t通道摄像机,c#,android,xamarin,C#,Android,Xamarin,我的跨平台移动应用程序正在使用此代码拍照 public void TakePhoto() { Context context = MainActivity.Instance; MainActivity activity = (MainActivity)context; Intent intent = new Intent(MediaStore.ActionImageCapture);
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()
Xamarin.Forms.DependencyService.Register();
DependencyService.Get().TakePhoto()
我使用的是Visual Studio 2017,Xamarin表单。我的项目构建属性平台的目标是最新的平台安卓8.1(Oreo)
知道问题出在哪里吗
Xamarin表单无法访问摄影机
正如Jesus Angulo和SushiHangover所说,权限需要请求用户在Android 6.0及更高版本上运行时批准。这用于请求运行时权限。您也可以在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" />
您如何请求权限?是的,权限已设置。。对于读/写和cameraRemember,在Android 6.0+中,您需要主动请求权限,清单权限仅供参考,在安装过程中默认不授予这些权限。安装应用程序后,不会请求任何权限。我在安装后设置权限,从设置->应用程序->我的应用程序->权限。在android mainifest中将目标版本设置为覆盖23。