Выпустить Android-камеру без перезагрузки? - программирование
Подтвердить что ты не робот

Выпустить Android-камеру без перезагрузки?

В настоящее время я пытаюсь заставить камеру работать в моем приложении, и у меня возникают проблемы со всей темой camera.release(); Я делаю довольно сложные вещи, и нет четкого способа просто вызвать camera.release(), поэтому я должен продолжать пробовать новые способы, но каждый раз, когда я ошибаюсь, мое приложение падает (как и ожидалось), оставляя камеру не выпущенной. Итак, чтобы снова проверить свое приложение, мне нужно перезагрузить свой телефон, чтобы обновить камеру.

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

Спасибо!

4b9b3361

Ответ 1

Управление ресурсами камеры осуществляется службой поддержки Android (libcameraservice.so). Процесс, выполняющий Camera Service, составляет mediaserver. Если вы перезапустите Media Server, вы эффективно освободите все блокировки камеры.

Для этого у вас должен быть доступ к корневому каталогу.

Запустите adb shell; su, чтобы получить командную строку root.

[email protected]:/ # ps|grep media
media     1901  1     129268 6168  ffffffff 4026d470 S /system/bin/mediaserver
media_rw  1909  1     3064   1380  ffffffff 4015f1ac S /system/bin/sdcard
u0_a19    22821 1899  484316 21588 ffffffff 4016d574 S android.process.media
[email protected]:/ # kill 1901
kill 1901

Теперь сервер мультимедиа должен быть запущен автоматически.

Android 7.0

Последняя версия Android имеет двоичный бит mediaserver в несколько выделенных двоичных файлов для обеспечения безопасности. Подробнее читайте в официальной документации .

Поэтому вместо mediaserver вы должны искать cameraserver. Не проверено.

Ответ 2

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

Ответ 3

Я не уверен, есть ли способ reset камеры через терминал или DDMS, но у меня был большой успех, поместив мой вызов Camera.release() в мой метод Activity onPause(), так что камера появляется, когда приложение переходит в фоновый режим. Аналогично, инициализация моей камеры происходит в onResume(), поэтому камера будет открыта при первом запуске, затем будет снова и снова перезапущена, когда ваше приложение перемещается в фоновый режим и из него. Этот метод полностью устранил проблему, которую вы описываете для меня.

Если проблема остается для вас, также рассмотрите возможность обертывания кода, который может произойти сбой в try/catch, где вы поймаете любой Exception и сделаете вызов, чтобы освободить камеру в этом блоке catch. Обычно я использую этот метод для ошибок, которые можно сгладить, не закрывая приложение, однако я считаю, что он будет работать во всех случаях.

Ответ 4

Вот решение, устанавливающее UncaughtExceptionHandler: fooobar.com/questions/323147/...

Он освобождает камеру, когда приложение умирает.