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"/>
Ответы
Ответ 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 → Приложения ---> выберите приложение → Разрешения → включите камеру, микрофон и память.