Android Camera2: API de CameraManager Explicación detallada

1. Descripción general de la clase CameraManager

CameraManager es un administrador de servicios del sistema para detectar, caracterizar y conectarse a CameraDevices.

CameraManager es un servicio del sistema responsable de consultar y establecer conexiones de cámara. Tiene pocas funciones. A continuación se describen algunas funciones clave de CameraManager:

1) Encapsule la información de la cámara en Camera Characteristics y proporcione una forma de obtener instancias de CameraCharacteristics.
2) Abra el dispositivo de la cámara (openCamera) de acuerdo con la identificación de la cámara especificada.
3) Proporcione un atajo para configurar el flash en el modo de linterna.

Context.getSystemService()Se puede obtener una instancia de esta clase llamando a  .

Administrador de CameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);

En segundo lugar, la clase interna

1. Clase abstracta de devolución de llamada de disponibilidad

Devolución de llamada para cuando un dispositivo de cámara se vuelve utilizable o no se puede abrir.
La cámara se vuelve utilizable cuando ya no está en uso o cuando se instala una nueva cámara desmontable. Cuando ciertas aplicaciones o servicios comienzan a usar la cámara, o cuando se desconecta la cámara extraíble, dejan de estar disponibles.
Extienda esta devolución de llamada y pase una instancia de su subclase a {@link CameraManager#registerAvailabilityCallback} para recibir una notificación de dichos cambios de disponibilidad.

Interfaz de devolución de llamada:

/**

La nueva cámara ya está disponible.
La implementación predeterminada de este método no hace nada.
Parámetros:
cameraId: identificador único para la nueva cámara.

*/

public void onCameraAvailable(@NonNull String cameraId) {
    // implementación vacía por defecto
}

/**

Las cámaras disponibles anteriormente ya no están disponibles.
Si una aplicación tiene una instancia de CameraDevice activa para una cámara que actualmente está desconectada, la aplicación recibirá un error de desconexión.
La implementación predeterminada de este método no hace nada.
Parámetros:
cameraId – Identificador único de la cámara desconectada.

*/

vacío público en la cámara no disponible (@NonNull String cameraId) {
    // implementación vacía por defecto
}

/**

Llamado cada vez que cambia la prioridad de acceso a la cámara.
Notificación de que la prioridad de acceso a la cámara ha cambiado y ahora se puede encender la cámara. Una aplicación que previamente negó el acceso a la cámara porque un usuario de mayor prioridad ya estaba usando la cámara, o que se desconectó de una sesión de cámara activa porque un usuario de mayor prioridad intentó abrir la cámara, debe intentar abrir la cámara nuevamente si todavía quiere usarlo. Tenga en cuenta que varias aplicaciones pueden recibir esta devolución de llamada al mismo tiempo, y solo una de ellas logrará abrir la cámara, según la prioridad de acceso y el tiempo exactos. Este método es útil cuando se pueden reanudar varias aplicaciones al mismo tiempo y el usuario cambia el enfoque entre ellas, o cuando la aplicación que actualmente usa la cámara se mueve entre pantalla completa e imagen en imagen (PiP). En este caso, no se llamará a la devolución de llamada de la cámara disponible/no disponible, pero ahora otra aplicación puede tener una prioridad de acceso a la cámara más alta que la aplicación que actualmente usa la cámara.
La implementación predeterminada de este método no hace nada.

*/
public void onCameraAccessPrioritiesChanged() { // implementación vacía predeterminada }

/**

La cámara física vuelve a estar disponible.
De forma predeterminada, todas las máquinas físicas de la cámara múltiple lógica están disponibles, por lo que cuando se llama a onCameraAvailable de la cámara múltiple lógica, no se llama a onPhysicalCameraAvailable en ninguna máquina física de la cámara múltiple lógica. Sin embargo, se puede llamar a onPhysicalCameraUn Available después de onCameraAvailable si alguna cámara física específica no está disponible en primer lugar.
La implementación predeterminada de este método no hace nada.
Parámetros:
cameraId: el identificador único de la multicámara lógica.

PhysicalCameraId: identificador único de la cámara física.

*/

vacío público enPhysicalCameraAvailable(@NonNull String cameraId,
@NonNull String IdCámaraFísica) {
    // implementación vacía por defecto
}

/**

La cámara física disponible anteriormente ya no está disponible.
De forma predeterminada, todas las máquinas físicas de la cámara múltiple lógica están disponibles, por lo que cuando se llama a onCameraAvailable de la cámara múltiple lógica, no se llama a onPhysicalCameraAvailable en ninguna máquina física de la cámara múltiple lógica. onPhysicalCameraUn Available puede llamarse después de onCameraAvailable si alguna cámara física específica no está disponible inicialmente.
La implementación predeterminada de este método no hace nada.
Parámetros:
cameraId: el identificador único de la multicámara lógica.

PhysicalCameraId: identificador único de la cámara física.

*/

vacío público enPhysicalCameraNodisponible(@NonNull String cameraId,
        @NonNull String IdCámaraFísica) {
    // implementación vacía por defecto
}

/**

La aplicación ha abierto el dispositivo de la cámara.
La implementación predeterminada de este método no hace nada.
Se requiere android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER para recibir esta devolución de llamada.
Parámetros:
cameraId: el identificador único de la cámara abierta.

packageId: el ID del paquete de la aplicación que abrió la cámara.

*/

@SistemaApi
@TestApi
@RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER)
public void onCameraOpened(@NonNull String cameraId, @NonNull String paqueteId) {
    // implementación vacía por defecto
}

/**

Se ha cerrado una cámara previamente abierta.
La implementación predeterminada de este método no hace nada.
Se requiere android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER para recibir esta devolución de llamada.
Parámetros:
cameraId – identificador único de la cámara cerrada.

*/

@SistemaApi
@TestApi
@RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER)
public void onCameraClosed(@NonNull String cameraId) {
    // implementación vacía por defecto
}

2. Clase abstracta TorchCallback

La devolución de llamada para el modo de flash de la cámara no está disponible, está deshabilitada o habilitada.
El modo antorcha deja de estar disponible cuando el dispositivo de la cámara al que pertenece no está disponible o cuando otros recursos de la cámara que requiere están ocupados debido a otra actividad de la cámara de mayor prioridad. El modo antorcha está deshabilitado cuando está apagado o cuando el dispositivo de cámara al que pertenece ya no está en uso y otros recursos de la cámara que requiere ya no están ocupados. Cuando la aplicación llama a setTorchMode para desactivar el modo de linterna de la cámara, o cuando la aplicación activa el modo de linterna de otra cámara (si no se admiten varios modos de linterna al mismo tiempo), el modo de linterna de la cámara se desactivará. Cuando setTorchMode activa el modo de antorcha, se habilitará el modo de antorcha.
Solo se puede configurar mediante setTorchMode cuando el modo antorcha está deshabilitado o habilitado.
Extienda esta devolución de llamada y pase una instancia de su subclase a registerTorchCallback para recibir notificaciones de dichos cambios de estado.

/**

El modo de linterna de la cámara no se puede configurar a través de setTorchMode.
Si el modo antorcha se activó previamente llamando a setTorchMode, apáguelo antes de llamar a onTorchModeUn Available. setTorchMode fallará hasta que el modo antorcha se deshabilite o se vuelva a habilitar.
La implementación predeterminada de este método no hace nada.
Parámetros:
cameraId: identificador único de la cámara para la que el modo linterna no está disponible.

*/

vacío público en ModoTorchNodisponible(@NonNull String cameraId) {
    // implementación vacía por defecto
}

/**

El modo de linterna de la cámara está habilitado o deshabilitado y se puede cambiar con setTorchMode.
La implementación predeterminada de este método no hace nada.
Parámetros:
cameraId: el identificador único de la cámara cuyo modo de linterna se cambió.

habilitado: el estado al que se ha cambiado el modo de linterna de la cámara. Cierto cuando el modo antorcha está activado y se puede desactivar. Falso cuando el modo antorcha está apagado y se puede encender.

*/

public void onTorchModeChanged(@NonNull String cameraId, booleano habilitado) {
    // implementación vacía por defecto
}

/**

En el modo de linterna, el nivel de brillo de la unidad de flash de la cámara se ha cambiado con TurnOnTorchWithStrengthLevel. Esta devolución de llamada no se activa cuando se apaga la linterna, incluso si la intensidad de la linterna se restablece a los valores predeterminados CameraCharacteristics.FLASH_INFO_STRENGTH_DEFAULT_LEVEL La
implementación predeterminada de este método no hace nada.
Parámetros:
cameraId: identificador único de la cámara cuyo nivel de brillo del flash se modificó.

newStrengthLevel: el nivel de brillo de la unidad de flash que se ha cambiado.

*/

public void onTorchStrengthLevelChanged(@NonNull String cameraId, int newStrengthLevel) {
    // implementación vacía por defecto
}

3. Método

/**

Obtenga las características de la cámara de acuerdo con la identificación de la cámara y guarde las características de la cámara en un objeto CameraCharacteristics. Un atributo se representa como un par clave-valor, por lo que el objeto es una colección de pares clave-valor.

Consulta las capacidades del dispositivo de la cámara. Estas funciones son inmutables para una cámara determinada.
A partir del nivel de API 29, esta función también se puede usar para consultar las capacidades de las cámaras físicas que solo se pueden usar como parte de una multicámara lógica. Estas cámaras no se pueden abrir directamente a través de openCamera.
Además, a partir del nivel de API 29, aunque la información más básica de la cámara aún está disponible incluso sin el permiso CAMERA, algunos valores no están disponibles para las aplicaciones que no tienen ese permiso. CameraCharacteristics.getKeysNeedingPermission enumera las claves que no están disponibles.
Parámetros:
cameraId – ID del dispositivo de cámara a consultar. Esta puede ser una ID de cámara independiente que openCamera puede abrir directamente, o una ID de cámara física que solo se puede usar como parte de una multicámara lógica.
Devuelve:
Propiedad de la cámara dada.
Emite:
IllegalArgumentException: si cameraId no coincide con ningún dispositivo de cámara conocido.
CameraAccessException: si el dispositivo de la cámara se ha desconectado.

*/

Características de cámara públicas getCameraCharacteristics(@NonNull String cameraId)
        lanza CameraAccessException

/**

Consulte la capacidad de extensión de la cámara del dispositivo de la cámara.
Parámetros:
cameraId – ID del dispositivo de cámara a consultar. Esta debe ser una ID de cámara independiente que openCamera pueda abrir directamente.
Rturn:
Propiedad de la cámara dada
Lanza:
IllegalArgumentException - si cameraId no coincide con ningún dispositivo de cámara conocido.
CameraAccessException: si el dispositivo de la cámara se ha desconectado

*/

public CameraExtensionCharacteristics getCameraExtensionCharacteristics(
        @NonNull String cameraId) lanza CameraAccessException

/**

Obtenga una lista de cámaras, cada cámara está representada por una identificación de tipo Cadena, y el dispositivo de cámara correspondiente se puede obtener a través de la identificación más adelante. La lista de todos los ID de cámara se almacena en una matriz de cadenas , y la cantidad de cámaras en el dispositivo son solo algunos elementos de la matriz.

Devuelve una lista de los dispositivos de cámara actualmente conectados por identificador, incluidas las cámaras que otros clientes de Camera API pueden estar usando.
Las cámaras no extraíbles utilizan números enteros a partir de 0 como identificadores, mientras que las cámaras extraíbles tienen identificadores únicos para cada dispositivo individual, incluso si son del mismo modelo.
Esta lista no incluye cámaras físicas que solo se pueden usar como parte de un dispositivo lógico de varias cámaras.
Volver:
una lista de los dispositivos de cámara conectados actualmente.

*/

public String[] getCameraIdList() lanza CameraAccessException

/**

Similar a getCameraIdList(). Sin embargo, getCamerIdListNoLazy() debe comunicarse con cameraserver para obtener la lista de ID de cámara. Esto es para la comodidad de las pruebas, ya que algunas ID de cámara pueden quedar "fuera de línea" con los siguientes cambios sin devolución de llamada del servidor de la cámara para el
  permiso SYSTEM_CAMERA (aunque este no es un permiso modificable, las pruebas pueden llamar a adquirir (soltar) ShellPermissionIdentity() y efectivamente cambiar sus permisos). Esta llamada también afecta las ID de cámara devueltas por getCameraIdList(). Las pruebas con ID de autoridad de shell no deben mezclar getCameraIdList() y getCameraListNoLazyCalls().

*/

public String[] getCameraIdListNoLazy() lanza CameraAccessException

/**

Devuelve un conjunto combinado de identificadores de dispositivos de cámara actualmente conectados, lo que admite la configuración simultánea de sesiones de dispositivos de cámara.
Los dispositivos en estas combinaciones se pueden configurar simultáneamente mediante la misma aplicación de cámara cliente. Sin embargo, no se garantiza que sea compatible el uso simultáneo de estos dispositivos de cámara por parte de dos aplicaciones diferentes.
Para operaciones concurrentes, en orden cronológico: - La aplicación primero debe cerrar todas las cámaras abiertas para la sesión configurada usando CameraDevice.close. - Antes de configurar una sesión en cualquier dispositivo de cámara, todos los dispositivos de cámara que se van a operar simultáneamente deben abrirse con openCamera.
Se garantiza que cada dispositivo en la combinación admita la combinación de transmisión, que se puede obtener consultando la clave CameraCharacteristics.SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS en getCameraCharacteristics.
Para operaciones simultáneas, si el dispositivo de la cámara tiene un rango de zoom no nulo especificado por CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE, es posible que no se aplique su rango de zoom completo. Las aplicaciones pueden usar CaptureRequest.CONTROL_ZOOM_RATIO >=1 y <= CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM durante operaciones simultáneas.

La composición del conjunto puede incluir dispositivos de cámara que otros clientes de API de cámara pueden utilizar.
Las sesiones de extensión de cámara simultáneas CameraExtensionSession no son compatibles actualmente.
El conjunto compuesto no contiene cámaras físicas que solo se pueden usar como parte de un dispositivo lógico de varias cámaras.
Si hay una nueva ID de cámara disponible a través de CameraManager.AvailabilityCallback.onCameraUnavailable(String), el cliente puede llamar a este método para comprobar si hay disponible una nueva combinación de ID de cámara para la transmisión simultánea.
Rturn:
el conjunto combinado de dispositivos de cámara actualmente conectados, posiblemente configurando la sesión simultáneamente. El conjunto de combinaciones estará vacío si el subsistema de la cámara no admite dichas combinaciones.
Lanzar:
CameraAccessException: si el dispositivo de la cámara se ha desconectado.

*/

@NonNull
public Set<Set<String>> getConcurrentCameraIds() lanza CameraAccessException

/**

Comprueba si el conjunto proporcionado de dispositivos de cámara y su correspondiente SessionConfiguration se pueden configurar al mismo tiempo.
Este método realiza una verificación de tiempo de ejecución en la combinación dada de SessionConfiguration e ID de cámara. El resultado confirma si se puede crear una sesión de captura de cámara simultáneamente usando CameraDevice.createCaptureSession(SessionConfiguration) con éxito en un dispositivo de cámara dado usando la configuración de sesión pasada.
Este método se puede llamar en cualquier momento antes, durante y después de una sesión de captura de actividad. No afecta el comportamiento normal de la cámara de ninguna manera y debe ser mucho más rápido que crear una sesión de captura regular o restringida.
Aunque este método es más rápido que crear una nueva sesión de captura, no está diseñado para explorar todo el espacio de combinaciones admitidas de flujos simultáneos. Las combinaciones de secuencias concurrentes forzadas disponibles se pueden obtener consultando la clave CameraCharacteristics.SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS en getCameraCharacteristics.
Tenga en cuenta que los parámetros de la sesión se ignoran y no es necesario llamar a SessionConfiguration.setSessionParameters.
Rturn:
verdadero si el subsistema de la cámara admite la combinación dada de la configuración de la sesión y el ID de la cámara correspondiente; de ​​lo contrario, falso, o si el conjunto de dispositivos de cámara proporcionado no es un subconjunto del conjunto devuelto por getConcurrentCameraIds.
Lanzar:
CameraAccessException: si uno de los dispositivos de cámara consultados ya no está conectado.

*/

@RequiresPermission(android.Manifest.permission.CAMERA)
público booleano isConcurrentSessionConfigurationSupported(
        @NonNull Map<String, SessionConfiguration> cameraIdAndSessionConfig)
        lanza CameraAccessException

/**

Devuelve el nivel de brillo de la unidad de flash asociada con cameraId.
Parámetros:
cameraId: el identificador único del dispositivo de la cámara al que pertenece el flash.
Retorno:
El nivel de brillo del flash asociado con cameraId. Cuando se apaga la linterna, el nivel de intensidad se restablecerá al nivel predeterminado CameraCharacteristics.FLASH_INFO_STRENGTH_DEFAULT_LEVEL. En este caso, el valor de retorno será CameraCharacteristics.FLASH_INFO_STRENGTH_DEFAULT_LEVEL en lugar de 0.
Lanza:
CameraAccessException: si no se puede acceder a la unidad de flash.
IllegalArgumentException: si cameraId es nulo, cameraId no coincide con ningún dispositivo de cámara disponible actualmente o anteriormente, o el dispositivo de cámara no tiene una unidad de flash.

*/

public int getTorchStrengthLevel(@NonNull String cameraId) lanza CameraAccessException

/**

El método openCamera() tiene tres parámetros, el primer parámetro es cameraId, aquí se usa el id de la cámara trasera obtenido en el paso anterior. El segundo parámetro es el objeto de devolución de llamada del resultado del procesamiento, que es el mismo que el detector en el mecanismo de procesamiento de eventos. El método openCamera() se ejecuta de forma asíncrona. Después de la llamada, el método regresa inmediatamente y el código subsiguiente continúa ejecutándose. Se tarda un tiempo en devolver el resultado de si la cámara se abrió correctamente. Después de regresar, el método correspondiente del se llama al objeto de devolución de llamada. El tercer parámetro es el subproceso que ejecuta el método de devolución de llamada, que puede ser el subproceso principal o un subproceso de fondo. El objeto de devolución de llamada debe crearse antes de llamar al método openCamera().

Abre una conexión a la cámara con la ID dada.
Utilice {@link #getCameraIdList} para obtener una lista de
dispositivos de cámara disponibles. Tenga en cuenta que incluso si aparece la identificación, si el dispositivo
  desconecta {@link
  #openCamera} entre llamadas a {@link #getCameraIdList}, o si un cliente API de cámara de mayor prioridad comienza a usar el dispositivo de cámara.
A partir del nivel de API 23, un dispositivo cuya devolución de llamada {@link AvailabilityCallback#onCameraUnavailable(String)} se llama porque el dispositivo está siendo utilizado por un cliente de API de cámara de fondo de menor prioridad todavía se puede abrir llamando a este método cuando se llama al cliente de API de cámara Tiene prioridad sobre el cliente API de la cámara que actualmente usa el dispositivo. En general, si la actividad de primer plano de nivel superior se ejecuta en su proceso de aplicación, su proceso tendrá la prioridad más alta al acceder a la cámara, y este método tendrá éxito incluso si el dispositivo de la cámara está siendo utilizado por otro cliente API de cámara. Cualquier aplicación de baja prioridad que pierda el control de la cámara de esta manera recibirá una devolución de llamada {@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected}. Abrir la misma ID de cámara dos veces en la misma aplicación también provocará que se active la devolución de llamada {@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected} para {@link CameraDevice} en la primera llamada abierta y todas las tareas en curso será descartado.

Cuando la cámara se abre con éxito, se llamará a {@link CameraDevice.StateCallback#onOpened} con el {@link CameraDevice} recién abierto. Luego, el dispositivo de la cámara se puede configurar para que funcione llamando a {@link CameraDevice#createCaptureSession} y {@link CameraDevice#createCaptureRequest}.

Antes del nivel de API 30, cuando una aplicación intentaba abrir varios {@link CameraDevice} con ID diferentes y el dispositivo no permitía abrir dicha combinación, {@link #openCamera} fallaba con una {@link CameraAccessException} o One o más {@link CameraDevice} abiertos se desconectarán y recibirán una devolución de llamada de {@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected}. El comportamiento que se produce depende de la implementación del dispositivo y puede variar de un dispositivo a otro. A partir del nivel de API 30, si el dispositivo no admite
  la apertura de combinación de cámara, se garantiza que la llamada {@link #openCamera} fallará y no se desconectará ningún {@link CameraDevice} existente.

Dado que el dispositivo de la cámara se abrirá de forma asíncrona, cualquier operación asíncrona realizada en la instancia de CameraDevice devuelta se pondrá en cola hasta que se complete el inicio del dispositivo y se invoque el método {@link CameraDevice.StateCallback#onOpened onOpened} de devolución de llamada. Las operaciones pendientes se procesan secuencialmente.

Si la cámara se desconecta durante la inicialización después de que regrese esta llamada de función, el {@link CameraDevice.StateCallback#onDisconnected} y el {@link CameraDevice} desconectado (y {@link CameraDevice.StateCallback#onOpened} se saltarán).
Si falla la apertura del dispositivo de la cámara, se llamará al método {@link CameraDevice.StateCallback#onError onError} de devolución de llamada del dispositivo y las llamadas posteriores al dispositivo de la cámara generarán una {@link CameraAccessException}.

parámetro:

cameraId: el identificador único del dispositivo de la cámara para abrir
la devolución de llamada: la devolución de llamada llamada después de que se abre la cámara
.

Lanza:

CameraAccessException: si la cámara está deshabilitada por la política del dispositivo, está desconectada, está siendo utilizada por un cliente API de cámara de mayor prioridad o el dispositivo ha alcanzado sus recursos máximos y no puede abrir este dispositivo de cámara.
IllegalArgumentException: si cameraId o callback es nulo, o cameraId no coincide con ningún dispositivo de cámara disponible actualmente o anteriormente devuelto por {@link #getCameraIdList}.
SecurityException: si la aplicación no tiene permiso para acceder a la cámara

*/

@RequiresPermission(android.Manifest.permission.CAMERA)
public void openCamera(@NonNull String cameraId,
        @NonNull final CameraDevice.StateCallback devolución de llamada, controlador @Nullable Handler)
        lanza CameraAccessException

/**

Establece el modo de flash para una cámara de identificación determinada sin abrir el dispositivo de la cámara.
Use getCameraIdList para obtener una lista de dispositivos de cámara disponibles y use getCameraCharacteristics para verificar si un dispositivo de cámara tiene flash. Tenga en cuenta que incluso si el dispositivo de la cámara tiene una unidad de flash, es posible que no se pueda activar el modo de linterna si el dispositivo de la cámara u otros recursos de la cámara necesarios para activar el modo de linterna están en uso.
Si al llamar a setTorchMode se activa o desactiva correctamente el modo linterna, se llamará a CameraManager.TorchCallback.onTorchModeChanged. Sin embargo, incluso si la habilitación del modo de linterna tiene éxito, la aplicación no tiene la propiedad exclusiva del dispositivo de cámara o flash. Cuando el dispositivo de la cámara al que pertenece el flash no está disponible u otros recursos de la cámara que mantienen la linterna encendida no están disponibles (se llamará CameraManager.TorchCallback.onTorchModeUndisponible), el modo de linterna se apagará y dejará de estar disponible. Además, otras aplicaciones son gratuitas para llamar a setTorchMode para desactivar el modo de linterna (se llamará a CameraManager.TorchCallback.onTorchModeChanged). Si la aplicación que recientemente activó el modo linterna se cierra, el modo linterna se apagará.
Parámetros:
cameraId: el identificador único del dispositivo de la cámara al que pertenece el flash.

habilitado: el estado de modo de antorcha deseado para el dispositivo de cámara de destino. Establézcalo en verdadero para activar el modo antorcha. Establézcalo en falso para desactivar el modo antorcha.

Lanza:
CameraAccessException: si no se puede acceder a la unidad de flash. Si un dispositivo de cámara está en uso, se genera CameraAccessException.CAMERA_IN_USE. Se genera CameraAccessException.MAX_CAMERA_IN_USE si se están utilizando otros recursos de la cámara necesarios para activar el modo linterna. Si el servicio de la cámara no está disponible, se lanzará CameraAccessException.CAMERA_DISCONNECTED.
IllegalArgumentException: si cameraId es nulo, cameraId no coincide con ningún dispositivo de cámara disponible actualmente o anteriormente, o el dispositivo de cámara no tiene una unidad de flash.

*/

public void setTorchMode(@NonNull String cameraId, booleano habilitado)
        lanza CameraAccessException

/**

Regístrese para recibir notificaciones sobre la disponibilidad del dispositivo de cámara.
Si vuelve a registrar la misma devolución de llamada, se reemplazará el controlador con el nuevo proporcionado.
Cuando la devolución de llamada se registra por primera vez, se llama inmediatamente y muestra el estado de disponibilidad de todos los dispositivos de cámara conocidos actualmente.
Se llama a CameraManager.AvailabilityCallback.onCameraUn Available(String) cada vez que cualquier cliente API de cámara abre el dispositivo de cámara. A partir del nivel de API 23, otros clientes de la API de cámara aún pueden abrir dichos dispositivos de cámara y los clientes existentes serán desalojados si tienen una prioridad más alta que los clientes existentes del dispositivo de cámara. Ver abrir() para más detalles.
Dado que esta devolución de llamada se registrará con el servicio de la cámara, recuerde anular su registro cuando ya no sea necesario; de lo contrario, la devolución de llamada continuará recibiendo eventos indefinidamente y puede evitar que se liberen otros recursos. Específicamente, la invocación de la devolución de llamada será independiente del ciclo de vida de la actividad general y también independiente del estado de cada instancia de CameraManager.

Parámetros:
devolución de llamada: la nueva devolución de llamada para enviar
el controlador de notificaciones de disponibilidad de la cámara: el controlador que debe invocarse para la devolución de llamada, o nulo para usar el looper del subproceso actual.
Lanza:
IllegalArgumentException: si el controlador es nulo pero el subproceso actual no tiene looper.

*/

public void registerAvailabilityCallback(@NonNull AvailabilityCallback devolución de llamada,
        controlador @Nullable Handler)

/**

Elimine la devolución de llamada agregada anteriormente; la devolución de llamada ya no recibirá devoluciones de llamada de conexión y desconexión.
La eliminación de devoluciones de llamadas no registradas no tiene ningún efecto.
Parámetros:
devolución de llamada: devolución de llamada para eliminar de la lista de notificaciones

*/

public void unregisterAvailabilityCallback(@NonNull AvailabilityCallback devolución de llamada)

/**

Registre una devolución de llamada para recibir notificaciones sobre el estado del modo antorcha.
Este método se comporta igual que registerTorchCallback(CameraManager.TorchCallback, Handler), excepto que toma un Executor en lugar de un Handler como parámetro.
Parámetros:
ejecutor: el ejecutor que se utilizará para invocar la devolución de llamada

devolución de llamada: nueva devolución de llamada para enviar el estado del modo antorcha a
Throws:
IllegalArgumentException: si el ejecutor es nulo.

*/

public void registerTorchCallback(@NonNull @CallbackExecutor Ejecutor ejecutor,
        devolución de llamada @NonNull TorchCallback)

/**

Elimine la devolución de llamada agregada anteriormente; la devolución de llamada ya no recibirá la devolución de llamada de estado del modo antorcha.
La eliminación de devoluciones de llamadas no registradas no tiene ningún efecto.
Parámetros:
devolución de llamada: devolución de llamada para eliminar de la lista de notificaciones

*/

public void unregisterTorchCallback(@NonNull TorchCallback devolución de llamada)

Acho que você gosta

Origin blog.csdn.net/github_27263697/article/details/131529193
Recomendado
Clasificación