Есть ли способ проверить, открыта ли камера или нет? Я не хочу открывать камеру, я просто хочу, чтобы проверить его статус.Как проверить, открыта ли камера любым приложением
ответ
Вы можете проверить его, используя метод Camera.open(cameraId)
.
Создает новый объект камеры для доступа к конкретной аппаратной камере. Если одна и та же камера открывается другими приложениями, это вызовет исключение RuntimeException.
Выдает RuntimeException
При открытии камеры не удается (например, если камера используется другим процессом или политики устройством менеджер отключил камеру).
Update:
Пример:
public boolean isCameraUsebyApp() {
Camera camera = null;
try {
camera = Camera.open();
} catch (RuntimeException e) {
return true;
} finally {
if (camera != null) camera.release();
}
return false;
}
Вы можете использовать этот метод, чтобы использовать как предположил Павел, но держать эту вещь в виду, что этот метод сначала приобрести камеру.
Если его приобретение успешно, значит, это означает, что никакое другое приложение не использует эту камеру и не забывает отпустить ее, иначе вы не сможете ее снова приобрести.
Его выбросы RuntimeException
Это означает, что камера используется другим процессом или диспетчер политики устройства отключил камеру.
Глядя в the source code of Camera, its JNI counterpart, и, наконец, the native code для подключения камеры с помощью службы, оказывается, что единственный способ определить, если камера используется непосредственно через результат Camera::connect(jint)
.
Проблема в том, что этот нативный код доступен только через функцию JNI android_hardware_Camera_native_setup(JNIEnv*, jobject, jobject, jint)
, которая устанавливает камеру для использования при создании экземпляра камеры с Java в new Camera(int)
.
Короче говоря, это не представляется возможным. Вам придется попытаться открыть камеру, и если она не удалась, предположите, что она используется другим приложением. Например .:
public boolean isCameraInUse() {
Camera c = null;
try {
c = Camera.open();
} catch (RuntimeException e) {
return true;
} finally {
if (c != null) c.release();
}
return false;
}
Чтобы лучше понять основные потоки нативного кода камеры, see this thread.
Если версия вашего устройства API выше 21, CameraManager.AvailabilityCallback
может быть хорошим выбором.
Вы должны сначала получить менеджер камеры системы с помощью следующего кода:
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
Затем вам нужно зарегистрировать AvailabilityCallback
:
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
manager.registerAvailabilityCallback(new CameraManager.AvailabilityCallback() {
@Override
public void onCameraAvailable(String cameraId) {
super.onCameraAvailable(cameraId);
//Do your work
}
@Override
public void onCameraUnavailable(String cameraId) {
super.onCameraUnavailable(cameraId);
//Do your work
}
}, yourHandler);
}
Это работает лучше, если версия API является выше 21.Вы можете обратиться к CameraManager, CameraManager.AvailabilityCallback и whole package
Попытка открыть камеру, чтобы проверить, если исключение работает хорошо, если уровень API ниже 23. В уровне API 23, обслуживание камеры отличается, чем раньше, от official docs:
Доступ к подсистеме камеры ресурсов, включая открытие и конфигурирование устройства камеры, награждается на основе «приоритет» процесса клиентского приложения. Процессы приложений с видимыми для пользователя или передними задачами обычно получают более высокий приоритет, что делает приобретение ресурса камеры и более надежным.
Активные клиенты камеры для приложений с более низким приоритетом могут быть «выселены», когда приложение с более высоким приоритетом пытается использовать камеру. В устаревшем API-интерфейсе камеры это приводит к вызову onError() для выведенного клиента. В API Camera2 это приводит к вызову onDisconnected() для выведенного клиента.
Мы можем видеть, что в API 23 или выше, пытаясь открыть камеру, используемую другим приложением/процесс захватит камеру из приложения/процесса, который использовал его, вместо того, чтобы RuntimeException
.
- 1. iOS Камера не открыта
- 2. Android камера не открыта
- 3. Как проверить, открыта ли jframe?
- 4. проверить, открыта ли папка (vba)
- 5. Как проверить, открыта ли трубка перед записью?
- 6. Как проверить, открыта ли рабочая книга
- 7. Как проверить, открыта ли facebook или нет
- 8. Камера используется другим приложением
- 9. Как проверить, открыта ли камера для захвата изображения или для записи видео в iOS?
- 10. Как проверить, включена ли камера устройства?
- 11. проверить электронную почту открыта
- 12. любым способом узнать, какая ссылка открыта в следующей вкладке?
- 13. Камера не открыта на устройствах HTC
- 14. проверить, была ли открыта трубка перед записью
- 15. ngCordova Камера не открыта, а только фотоальбом
- 16. Как проверить, используется ли файл другим приложением?
- 17. Определяет, используется ли камера?
- 18. Память, используемая любым приложением для iPhone
- 19. Как рисовать линии сетки, когда камера открыта avcapturemanager
- 20. Является ли их любым 3D-приложением GEF [завершенным плагином затмения]?
- 21. Как изменить настройки вспышки, когда камера открыта в cwac-cam2?
- 22. Как справиться с нажатием кнопки «назад», когда камера открыта.
- 23. android - как получить обратный вызов, когда камера открыта или закрыта
- 24. iOS: Как установить вспышку камеры включена, когда открыта камера?
- 25. Как проверить, открыта ли ссылка из моего приложения, используя UIAutomation?
- 26. Как проверить, открыта ли командная строка с помощью VB Script?
- 27. Как проверить, открыта ли боковая панель в Android?
- 28. Как проверить, открыта ли страница в контексте диалога?
- 29. Как проверить, правильно ли открыта страница в selendroid
- 30. Как проверить, открыта ли веб-страница из почтовой ссылки?