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

Android java lang runtimeexception не удается подключиться к службе камеры

В настоящее время я работаю над включением/выключением фонарика. Я получаю эту ошибку java.lang.RuntimeException: Fail to connect to camera service Я не знаю, почему эта ошибка происходит. Я упомянул о многих решениях, но моя проблема все еще не решена. Когда фонарик включен, ошибка не возникает, но когда фонарик выключен, возникает ошибка.

Мой код Основной код.

Разрешение моего манифеста:

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

Ответ 1

попробуйте это...

 static Camera camera = null;

объявить его сверху.

 try{ 
   if(clickOn == true) {
       clickOn = false;
       camera = Camera.open();
       Parameters parameters = camera.getParameters();
       parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
       camera.setParameters(parameters);
       camera.startPreview();

       remoteViews.setViewVisibility(R.id.button1, View.GONE);
       remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   } else {
       clickOn = true;
       camera.stopPreview();
       camera.release();
       camera = null;

       remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
       remoteViews.setViewVisibility(R.id.button2, View.GONE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   }    
} catch(Exception e) {
   Log.e("Error", ""+e);
}

Ответ 2

У меня была такая же проблема, что ни один из ответов здесь не был решен, поэтому после его решения я добавляю свой способ его решения. Это относится к новым версиям Android, поддерживающим настройку разрешений для каждого приложения (начиная с Marshmallow, 6.0). Разрешение на камеру может быть отключено и должно быть включено из настроек приложения. Настройки → Приложения → [Ваше приложение] → Разрешения

Подробнее об этом здесь: http://developer.android.com/training/permissions/requesting.html

Ответ 3

Я также видел эту ошибку:

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

экспериментируя с приложением для фонарика. Оказывается, я был немного неряшлив с моими разрешениями и скопировал их в тело блока приложения в файле manifest.xml. Таким образом, вы действительно должны подчиняться синтаксису, как описано в:

http://developer.android.com/guide/topics/manifest/manifest-element.html

В противном случае приложение будет терпеть неудачу при сбое подключения к службе на вызове Camera.open(). Он должен выглядеть так, основываясь на ваших разрешениях в вопросе:

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

<application

Убедитесь, что ваше разрешение и список функций содержатся только в разделе манифеста и не захоронены в разделе приложения!

Ответ 4

Эта проблема может возникнуть в android 6.0, если вы не разрешили разрешение камеры для своего приложения. Начиная с Android 6.0 вы можете обрабатывать разрешение на доступ к приложениям, которое вы предоставите или не получите конкретное разрешение для приложения.

Итак, вам нужно включить разрешение от settings->apps->your_app->enable camera permission, если оно еще не включено.

Ответ 5

Если ваша версия os 6.0 или более поздняя версия попробуйте это, надеюсь, что это поможет.

public class RequestUserPermission {

private Activity activity;
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.CAMERA
};

public RequestUserPermission(Activity activity) {
    this.activity = activity;
}

public  void verifyStoragePermissions() {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}
}


**//CALL FROM YOUR ACTIVITY**
 RequestUserPermission requestUserPermission = new RequestUserPermission(this);
    requestUserPermission.verifyStoragePermissions();

Ответ 6

если вы попытаетесь открыть камеру с помощью идентификатора камеры, которого не существует, вы получите ту же самую ошибку (java.lang.RuntimeException: Fail to Connect to camera service)

посмотрите на свой код на этом блоке

camera.setParameters(parameters);
camera.stopPreview();
camera.release();
camera = null;

Вызовите release(), чтобы освободить камеру для использования другими приложениями. Приложения должны немедленно отпустить камеру в onPause() (и снова открыть() в onResume().

В приведенном выше коде сразу после выпуска вы помещаете нуль в камеру

Ответ 7

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

Как включить флэш-память камеры в Android?

http://www.androidhive.info/2013/04/android-developing-flashlight-application/

http://www.compiletimeerror.com/2013/08/how-to-turn-onoff-camera-led-flashlight.html#.U4WH5Xbc3o4

http://android.programmerguru.com/android-flashlight-example/

Ответ 8

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

Ответ 9

Вам нужно stopPreview() и release() после того, как вы вернетесь с камеры,    так что другое приложение может получить к нему доступ. Сделайте класс "Камера" статичным и назовите его null в onPause(). Это разрешает мою проблему.

Попробуйте:

 public class CameraPhotoCapture extends Activity{
    static Camera mcamera = null;
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        if (mcamera != null) {
            mcamera.stopPreview();
            mcamera.release();
            mcamera = null;
            Log.d(DEBUG_TAG, "releaseCamera -- done");
        }
        super.onPause();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        if (mcamera != null) {

            Camera.open();
            Log.d(DEBUG_TAG, "openCamera -- done");
        }
        super.onResume();
    }
}

Ответ 10

Попробуйте использовать эту строку, когда вы выходите из приложения:

System.exit(0);

У меня только откуда-то появился код приложения Flashlight. Для закрытия приложения использовалось System.exit(0). Я удалил его, зная, что это не очень хорошая практика. Затем я начал получать эти ошибки. Я попробовал решение принятого ответа, но потом начал получать некоторые другие ошибки. Поэтому вместо их решения я просто вернул эту строку System.exit(0). И он начал нормально работать. Я знаю, что это не очень хорошо, но для небольшого приложения для фонарей вы можете попробовать это быстрое решение.

Ответ 11

Если весь ваш код в порядке, вы должны проверить, есть ли другое приложение, использующее вашу камеру. Затем вы должны закрыть другое приложение, которое в настоящее время использует вашу камеру.

Ответ 12

В моем андроид-проекте есть такая же проблема. Это моя ошибка Logcat


03-29 19: 26: 04.194 224-608/? V/EmulatedCamera_BaseCamera: getCameraInfo 03-29 19: 26: 04.196 224-224/? I/CameraService: CameraService :: connect call (PID -1 "com.proitzen.staffapp", идентификатор камеры 1) для версии HAL по умолчанию и Camera API версии 1 03-29 19: 26: 04.196 224-224/? W/ServiceManager: Ошибка разрешения: android.permission.CAMERA от uid = 10067 pid = 1776 03-29 19: 26: 04.196 224-224/? E/CameraService: Разрешение: нельзя использовать камеру pid = 1776, uid = 10067 03-29 19: 26: 04.196 1776 -1 776/com.proitzen.staffapp W/CameraBase: при подключении к камере произошла ошибка 1: Услуга недоступна 03-29 19: 26: 04.200 1776 -1 776/com.proitzen.staffapp D/AndroidRuntime: выключение виртуальной машины


Никакие решения не работали для меня. Мое приложение для Android работало на физических устройствах Android и давало указанную ошибку только в Genymotion.

Решение: запустите настройки эмулятора Genumotion → Приложения ---> выберите приложение → Разрешения → включите камеру, микрофон и память.