Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Extensões do fornecedor

O CameraX fornece uma API para acessar efeitos do fornecedor específicos do dispositivo, como bokeh, HDR e funcionalidades adicionais. A API permite que você consulte se uma extensão específica está disponível no dispositivo atual e ative a extensão da forma que preferir. Ou seja, se a extensão estiver disponível no dispositivo, ela será ativada. Se não estiver, ela será removida de forma eficiente.

Os fornecedores não precisam fornecer uma implementação para cada efeito e recurso. Qualquer recurso sem uma implementação fornecida pelo fornecedor é padronizado para a implementação do CameraX. A implementação padrão informa que o recurso não está disponível e pula para a ativação.

Ativar um efeito para captura de imagem

Para aplicar extensões de fornecedor aos casos de uso do CameraX, crie um objeto Extender, que permitirá a configuração do Builder com as configurações desse efeito ou função. Consulte a extensão para saber a disponibilidade. Se uma extensão não estiver disponível, a chamada enableExtension() não terá efeito.

Para implementar a extensão para o caso de uso da captura de imagem, implemente o extensor de captura de imagem correspondente, conforme exibido na seguinte amostra de código:

Kotlin

    import androidx.camera.extensions.BokehExtender

    fun onCreate() {
        // Create a Builder same as in normal workflow.
        val builder = ImageCaptureConfig.Builder()

        // Create a Extender object which can be used to apply extension
        // configurations.
        val bokehImageCapture = BokehImageCaptureExtender.create(builder)

        // Query if extension is available (optional).
        if (bokehImageCapture.isExtensionAvailable()) {
            // Enable the extension if available.
            bokehImageCapture.enableExtension()
        }

        // Finish constructing configuration with the same flow as when not using
        // extensions.
        val config = builder.build()
        val useCase = ImageCapture(config)
        CameraX.bindToLifecycle(this as LifecycleOwner, useCase)
    }
    

Java

    import androidx.camera.extensions.BokehExtender;

    void onCreate() {
        // Create a Builder same as in normal workflow.
        ImageCaptureConfig.Builder builder = new ImageCaptureConfig.Builder();

        // Create a Extender object which can be used to apply extension
        // configurations.
        BokehImageCaptureExtender bokehImageCapture = new
                BokehImageCaptureExtender(builder);

        // Query if extension is available (optional).
        if (bokehImageCapture.isExtensionAvailable()) {
            // Enable the extension if available.
            bokehImageCapture.enableExtension();
        }

        // Finish constructing configuration with the same flow as when not using
        // extensions.
        ImageCaptureConfig config = builder.build();
        ImageCapture useCase = new ImageCapture(config);
        CameraX.bindToLifecycle((LifecycleOwner)this, useCase);
    }

    

Desativar o efeito

Para desabilitar as extensões do fornecedor, crie uma nova instância do caso de uso de captura de imagem ou do caso de uso de visualização.

Outros recursos

Para saber mais sobre o CameraX, consulte os seguintes recursos.

Codelab

  • Primeiros passos com o CameraX (link em inglês)
  • Amostra de código

  • App de amostra oficial do CameraX (link em inglês)