Подтвердить что ты не робот

Не удалось подключиться к службе камеры

Я пытаюсь получить доступ к камере на своем телефоне. Я пишу простое приложение заглушки перед тем, как поместить код в виджет. Я не очень далеко. Код всегда выдает исключение во время выполнения "не удалось подключиться к службе камеры". Код (ущемленный из примера commonsware), который идет не так:

    @Override
    public void onResume() {
        super.onResume();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
            Camera.CameraInfo info = new Camera.CameraInfo();
            for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
                Camera.getCameraInfo(i, info);
                if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
                    try {
                        // Gets to here OK
                        camera = Camera.open(i);
                    } catch (Exception e) {
                        e.printStackTrace();
                        //  throws runtime exception :"Failed to connect to camera service"
                    }
                }
            }
        }
}

и мой манифест (исправлено 20 октября):

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nbt.cameratest"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="9" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".CameraTestActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

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

Кто-нибудь может предложить, что может быть неправильно?

ОБНОВЛЕНИЕ 20 октября

Logcat в SDK 4.0 сломан и не будет показывать конец журнала, поэтому я сократил этот бит как можно лучше из командной строки adb logcat:

W/ServiceManager( 2588): Permission failure: android.permission.CAMERA from uid=10136 pid=5744
E/CameraService( 2588): Permission Denial: can't use the camera pid=5744, uid=10136
W/System.err( 5744): java.lang.RuntimeException: Fail to connect to camera service
W/System.err( 5744):    at android.hardware.Camera.native_setup(Native Method)
W/System.err( 5744):    at android.hardware.Camera.<init>(Camera.java:294)
W/System.err( 5744):    at android.hardware.Camera.open(Camera.java:255)
etc..

Я не знаю, почему у меня нет разрешения, поскольку оно объявлено в манифесте

4b9b3361

Ответ 1

Немного вещей:

  • Почему ваши теги использования-использования и теги использования-функции в вашем теге активности. Как правило, разрешения включаются как прямые дочерние элементы вашего тега <manifest>. Это может быть частью проблемы.

  • В соответствии с андроидом открытая документация камеры вызывается исключение времени выполнения:

    если сбой подключения к службе камеры (например, если камера используется другим процессом или диспетчер политики устройства отключил камеру)

    Пробовали ли вы проверять, используется ли какая-либо камера какой-либо другой или если у вашего менеджера политики есть некоторые настройки, в которых камера выключена?

  • Не забывайте <uses-feature android:name="android.hardware.camera.autofocus" /> для автофокуса.

Пока я не уверен, что кто-нибудь из них поможет вам напрямую, я думаю, что им стоит исследовать, не по какой-либо другой причине, кроме просто исключить. Должна быть проведена тщательная проверка.

ИЗМЕНИТЬ Как уже упоминалось в комментариях ниже, решение заключалось в перемещении uses-permissions до тега приложения.

Ответ 2

Для новых версий Android, поддерживающих права на установку для каждого приложения (начиная с Marshmallow, 6.0), разрешение на камеру может быть отключено и должно быть включено из настроек приложения.

Ответ 3

Убедитесь, что вы вызываете метод release(), чтобы освободить камеру, когда она больше не нужна, или вы не сможете использовать камеру. Возможно, как проверка работоспособности, посмотрите, работает ли ваша обычная камера. Если он говорит, что это не удается, ваши предыдущие попытки в runni

Ответ 4

Я знаю, что этот вопрос уже давно ответил, но я хотел бы добавить небольшую вещь.

Для всех, имеющих ту же ошибку, обязательно добавьте это разрешение в файл манифеста:

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

ВАЖНО использовать буквы CAPITAL для CAMERA, так как у меня было разрешение с маленькими буквами, и это не сработало.

Ответ 5

Проблема связана с разрешением. Скопируйте следующий код в метод onCreate(). Проблема будет решена.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[] {Manifest.permission.CAMERA}, 1);
    }
}

После этого дождитесь действия пользователя и обработайте его решение.

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case CAMERA_PERMISSION_REQUEST_CODE:
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //Start your camera handling here
            } else {
                AppUtils.showUserMessage("You declined to allow the app to access your camera", this);
            }
    }
}

Ответ 6

запуск вашего кода сто раз может повлиять на работу камеры неправильно. Ваша деятельность может выполняться правильно, но система не может ее купить. Один главный совет, который пропустил, - это перезагрузка вашего телефона, а не только затмение. Это сработало для меня.

Ответ 7

так как этот вопрос был задан 4 года назад... и я не понял, что, если не будет упомянуто Questioner.., если не было поддержки разрешений времени выполнения.

но надеясь, что это будет полезно для пользователей, которые все еще пойманы в этой ситуации. Посмотрите разрешения времени выполнения, для меня это решило проблему, когда я добавил разрешения времени выполнения, чтобы предоставить доступ к камере. В качестве альтернативы вы можете предоставить разрешения для приложения вручную, перейдя в настройки вашего мобильного телефона => Apps => (выберите ваше приложение) => Разрешения в появившемся окне и включите/отключите требуемые разрешения. надеюсь, что это сработает.

Ответ 8

Я столкнулся с той же проблемой, и я делюсь тем, как я ее исправил. Это может помочь некоторым людям.

Сначала проверьте версию Android. Если он работает на Android 6.0 и выше (уровень API 23+), вам необходимо:

  1. Объявите разрешение в манифесте приложения. Обязательно вставьте разрешение над тегом приложения.

**<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />**

<application ...>
    ...
</application>

  1. Затем попросите пользователя утвердить каждое разрешение во время выполнения

    if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {//here, Permission is not granted ActivityCompat.requestPermissions(this, new String[] {android.Manifest.permission.CAMERA}, 50); }

Для получения дополнительной информации ознакомьтесь с документацией по API здесь.

Ответ 9

когда вы используете camera.open; и вы закончите использовать камеру, напишите эту замечательную камеру. release(); это остановит камеру, чтобы вы могли снова использовать ее

Ответ 10

У меня была такая же проблема. Пробовал все решения, упомянутые здесь, но ничего не получилось. Поэтому я перезагрузил свое устройство и внезапно проблема была решена.