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"/>

12 ответов


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

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

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

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


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

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

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

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

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

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

<application

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


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

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


Если ваша версия ОС 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();

если вы попытаетесь открыть камеру с помощью cameraID, который не существует, вы получите ту же ошибку (java.ленг.RuntimeException: не удается подключиться к службе камеры)

посмотреть код в этом блоке

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

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

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


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

Как включить вспышку камеры программно в Андроид?

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/


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


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

System.exit(0);

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


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


вам нужно stopPreview() и release() Как только вы вернулись с камеры, так что другое приложение может получить к нему доступ. Сделайте класс" Camera " статическим и назовите его 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();
    }
}

в моем Android peoject имеет ту же проблему. Это моя ошибка Logcat


03-29 19:26:04.194 224-608/? V / EmulatedCamera_BaseCamera: getCameraInfo 03-29 19:26: 04.196 224-224/? I / CameraService: CameraService:: подключение вызова (PID -1 "com.proitzen.staffapp", ID камеры 1) для версии по умолчанию HAL и версии API камеры 1 03-29 19: 26:04.196 224-224/? W / ServiceManager: ошибка разрешения: андроид.разрешение.Камера от 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-1776/com.proitzen.staffapp W / CameraBase: произошла ошибка при подключении к камере 1: сервис недоступно 03-29 19: 26: 04.200 1776-1776 / com.proitzen.staffapp D / AndroidRuntime: завершение работы VM


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

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