Android - Не удается подключиться к камере
Я использую код образца Android APIDemo.
Когда я запускаю пример CameraPreview, сначала он дал мне ошибку.
Я проследил, что один вниз и образец работал некоторое время.
Теперь он больше не работает. В нем говорится:
ERROR/AndroidRuntime(2949): java.lang.RuntimeException: Fail to connect to camera service
Что может быть причиной этого? Это происходит, когда вызывается camera.open()
.
Спасибо,
Тройник
Ответы
Ответ 1
Не забудьте правильно освободить все имеющиеся ресурсы камеры:
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mCam != null) {
mCam.stopPreview();
mCam.setPreviewCallback(null);
mCam.release();
mCam = null;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (mCam == null) {
mCam = Camera.open();
try {
mCam.setPreviewDisplay(holder);
// TODO test how much setPreviewCallbackWithBuffer is faster
mCam.setPreviewCallback(this);
} catch (IOException e) {
mCam.release();
mCam = null;
}
}
}
Ответ 2
Убедитесь, что ваши <uses-permission>
элементы находятся в правильных положениях в вашем файле AndroidManifest.xml
.
Ответ 3
Это происходит, если ваша деятельность не закрывает камеру правильно в surfaceDestroyed
или onConfigurationChanged
и т.д.
Не забывайте делать это каждый раз, когда вы выходите из своей деятельности:
if (camera!=null){
camera.stopPreview();
camera.release();
camera=null;
}
Ответ 4
Я также получаю этот тип проблемы на устройстве HTC. Чтобы решить добавить этот код:
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (camera!=null)
{
camera.stopPreview();
camera.release();
camera=null;
}
}
И все же вы не можете запустить камеру и перезагрузить устройство.
Ответ 5
Другая причина этой ошибки заключается в попытке открыть камеру, но какое-то другое приложение или даже ваше приложение уже использует камеру.
Ответ 6
Кроме того, если вы используете эмулятор, убедитесь, что вы выбрали эмуляцию передней камеры и/или задней камеры.
Диспетчер виртуальных устройств Android- > Выбрать устройство- > Изменить- > Передняя камера- > Эмуляция
Ответ 7
Как уже упоминалось, вы должны вызвать release() на объекте камеры, когда закончите.
Я не делал этого изначально, поэтому я изменил свой код, но он все равно дал мне ту же ошибку. Я развертывал непосредственно на физическом телефоне и должен был перезагрузить телефон, прежде чем он работал.
Ответ 8
Я также получил эту ошибку, когда тестировал и прекратил выполнение, прежде чем достигнуть точки в коде, когда:
if (camera!=null){
camera.stopPreview();
camera.release();
camera=null;
}
. Это заблокировало камеру, потому что она не была правильно выпущена. Мое решение состояло в том, чтобы выключить и снова включить камеру. Вы можете подтвердить это, пытаясь использовать встроенное приложение "Камера" в телефоне. Он не будет работать, потому что он все еще занят.
Ответ 9
Второе @матовое ожоги, однако вы можете проверить, что вы только пытаетесь получить камеру один раз. Я забыл прокомментировать строку и пытался запустить два действия, которые попытаются получить камеру.