Я получил сообщение «Не удалось подключиться к службе камеры», поэтому я не могу использовать оборудование камеры - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в xamarin android. Затем я попытался получить доступ к камере и отобразить поток обзора камеры в текстурном обзоре. поэтому я следовал этому руководству, но я отлаживаю проект, а затем появляется ошибка «Не удалось подключиться к службе камеры», хотя я добавил в свой AndroidManifest. xml.

Это мой код Activity.cs

    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);

            _textureView = new TextureView(this);
            _textureView.SurfaceTextureListener = this;

            SetContentView(_textureView);
        }

        public void OnSurfaceTextureAvailable(Android.Graphics.SurfaceTexture surface, int w, int h)
        {
            _camera = Camera.Open();

            _textureView.LayoutParameters = new FrameLayout.LayoutParams(w, h);

            try
            {
                _camera.SetPreviewTexture(surface);
                _camera.StartPreview();

            }
            catch (Java.IO.IOException ex)
            {
                System.Console.WriteLine(ex.Message);
            }
        }
        public bool OnSurfaceTextureDestroyed(Android.Graphics.SurfaceTexture surface)
        {
            _camera.StopPreview();
            _camera.Release();

            return true;
        }


        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 OnSurfaceTextureSizeChanged(Android.Graphics.SurfaceTexture surface, int width, int height)
        {
            System.Console.WriteLine("Size Changed");
        }

        public void OnSurfaceTextureUpdated(Android.Graphics.SurfaceTexture surface)
        {
            System.Console.WriteLine("Texture Updated");
        }
    }

Ошибка возникает в _camera = Camera.Open () метода OnSurfaceTextureAvailable.

Спасибо

1 Ответ

0 голосов
/ 06 мая 2020

Я создаю новый проект 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;  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...