Я создаю новый проект xamarin native android, тестирую этот код и работаю для меня на Android 10:
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity, TextureView.ISurfaceTextureListener
{
Camera _camera;
TextureView _textureView;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
_textureView = new TextureView(this);
_textureView.SurfaceTextureListener = this;
SetContentView(_textureView);
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
public void OnSurfaceTextureAvailable(Android.Graphics.SurfaceTexture surface, int width, int height)
{
if (Camera.NumberOfCameras == 0)
{
Toast.MakeText(this, "This app requires a camera", ToastLength.Long).Show();
return;
}
_camera = Camera.Open();
if (_camera == null)
_camera = Camera.Open(0);
var previewSize = _camera.GetParameters().PreviewSize;
_textureView.LayoutParameters =
new FrameLayout.LayoutParams(previewSize.Width, previewSize.Height, GravityFlags.Center);
try
{
_camera.SetPreviewTexture(surface);
_camera.StartPreview();
}
catch (Java.IO.IOException ex)
{
Console.WriteLine(ex.Message);
}
// this is the sort of thing TextureView enables
_textureView.Rotation = 45.0f;
_textureView.Alpha = 0.5f;
}
public bool OnSurfaceTextureDestroyed(Android.Graphics.SurfaceTexture surface)
{
_camera.StopPreview();
_camera.Release();
return true;
}
public void OnSurfaceTextureSizeChanged(Android.Graphics.SurfaceTexture surface, int width, int height)
{
// camera takes care of this
}
public void OnSurfaceTextureUpdated(Android.Graphics.SurfaceTexture surface) { }
}
, а затем открывая параметры свойств, выбираю Android Manifest- -> Необходимые разрешения -> проверьте КАМЕРУ
Я думаю, у вас проблема с разрешением, если у вас android 6 или более поздняя версия, вам нужно go в диспетчере приложений на вашем устройстве и разрешить разрешение камеры или установить разрешение запроса программно, например:
int requestPermissions;
string cameraPermission = Android.Manifest.Permission.Camera;
if (!(ContextCompat.CheckSelfPermission(this, cameraPermission) == (int)Permission.Granted)) {
ActivityCompat.RequestPermissions(this, new String[] { cameraPermission, }, requestPermissions);
}
и plz, используя это пространство имен в вашем MainActivity:
//namespace
using Android.Hardware;