Выпустить Android-камеру без перезагрузки?
В настоящее время я пытаюсь заставить камеру работать в моем приложении, и у меня возникают проблемы со всей темой camera.release()
; Я делаю довольно сложные вещи, и нет четкого способа просто вызвать camera.release()
, поэтому я должен продолжать пробовать новые способы, но каждый раз, когда я ошибаюсь, мое приложение падает (как и ожидалось), оставляя камеру не выпущенной. Итак, чтобы снова проверить свое приложение, мне нужно перезагрузить свой телефон, чтобы обновить камеру.
Есть ли способ освободить камеру через терминал или DDMS или это единственный способ ее освободить, перезапустив мой телефон? Это становится довольно старым, особенно когда крошечная ошибка приводит к расточительному времени, ожидая перезагрузки моего телефона.
Спасибо!
Ответы
Ответ 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/...
Он освобождает камеру, когда приложение умирает.
Ответ 5
Ну, я искал аналогичный ответ, я нашел это сообщение ниже, которое могло бы решить проблему.
Идеальный способ установки глобального обработчика исключенных исключений в Android
Вы можете отпустить камеру в UncaughtException