4 - Pareamento Bluetooth

Como buscar e parear dispositivos Bluetooth para conectar um mPOS à aplicação.

📘

Antes de iniciar a busca por dispositivos, solicite permissão ao usuário para ativar o Bluetooth. Sem essa permissão, não é possível conectar um dispositivo mPOS à aplicação.

Para realizar a busca de dispositivos Bluetooth, crie o objeto de descoberta mPOSDiscoveryRequestBuilder por meio da chamada MPOSPlugin.createDiscoveryRequestBuilder().

Fluxo de implementação

1. Solicite permissão ao usuário para ativar o Bluetooth.
2. Crie o objeto de descoberta com MPOSPlugin.createDiscoveryRequestBuilder().
3. Configure o tempo de busca com .time(...).
4. Implemente o callback de descoberta com .callback(...).
5. Implemente o callback de pareamento com .pairingCallback(...).
6. Envie a requisição com Zoop.post(request).

Exemplo de busca e pareamento

val request = MPOSPlugin.createDiscoveryRequestBuilder()
    .time(6L, TimeUnit.SECONDS)
    .callback(object: Callback<mPOSDiscoveryResponse>() {
        override fun onStart() {
            state = state.copy(
                status = Status.MESSAGE,
                message = "Buscando dispositivos"
            )
        }

        override fun onFail(error: Throwable) {
            Log.d(TAG, "Falha ao buscar dispositivos ${error.stackTraceToString()}")
            state = state.copy(
                status = Status.MESSAGE,
                message = "Falha ao buscar dispositivos"
            )
        }

        override fun onSuccess(response: mPOSDiscoveryResponse) {
            Log.d(TAG, "Dispositivos encontrados: ${response.available.items}")
            bluetoothDevice = response.available
            state = state.copy(
                status = Status.DISPLAY_BLUETOOTH_LIST,
                bluetoothDevices = response.available.items.toList()
            )
        }
    })
    .pairingCallback(object: Callback<PairingStatus>() {
        override fun onFail(error: Throwable) {
            Log.d(TAG, "Falha ao parear dispositivo")
            state = state.copy(
                status = Status.MESSAGE,
                message = "Falha ao parear dispositivo"
            )
        }

        override fun onSuccess(response: PairingStatus) {
            val message = if (response.status) {
                "Dispositivo pareado com sucesso"
            } else {
                "Falha ao parear dispositivo"
            }
            state = state.copy(
                status = Status.MESSAGE,
                message = message
            )
        }
    })
    .build()

Zoop.post(request)

No exemplo, a aplicação inicia a busca por dispositivos Bluetooth, exibe a lista de dispositivos encontrados e trata o resultado do pareamento. Quando a busca retorna com sucesso, os dispositivos disponíveis são acessados por response.available.items.

Callbacks

Use os callbacks para atualizar o estado da aplicação durante a busca e o pareamento do dispositivo.

.callback

O .callback retorna os estados do descobrimento de dispositivos Bluetooth.

CallbackQuando é chamadoUso recomendado
onStartQuando a busca por dispositivos inicia.Exibir uma mensagem de carregamento, como Buscando dispositivos.
onSuccessQuando a busca por dispositivos termina com sucesso.Exibir a lista de dispositivos encontrados para o usuário.
onFailQuando ocorre uma falha na busca por dispositivos.Registrar o erro e exibir uma mensagem de falha.
onCompleteQuando o fluxo de busca termina, tanto em caso de sucesso quanto de falha.Finalizar estados de carregamento ou limpar controles temporários da interface.

onSuccess

O onSuccess recebe um objeto mPOSDiscoveryResponse que contém available, um UserSelection<BluetoothDevice>. A lista de dispositivos pode ser acessada por response.available.items e exibida pela aplicação para o usuário selecionar o dispositivo que será pareado.

Cada item de response.available.items representa um dispositivo Bluetooth encontrado.

.pairingCallback

O .pairingCallback retorna os estados do pareamento de dispositivos Bluetooth.

CallbackQuando é chamadoUso recomendado
onSuccessQuando o fluxo de pareamento termina.Verificar response.status para confirmar se o pareamento foi concluído.
onFailQuando ocorre uma falha no pareamento.Registrar o erro e exibir uma mensagem de falha ao usuário.

onSuccess

O onSuccess recebe um objeto PairingStatus. Quando response.status for true, o dispositivo foi pareado com sucesso. Quando response.status for false, o pareamento não foi concluído.

Tratamento de falhas comuns

Trate os cenários de falha para manter o usuário informado durante o fluxo:

  • O Bluetooth não está ativado ou a permissão não foi concedida.
  • Nenhum dispositivo foi encontrado dentro do tempo configurado em .time(...).
  • A busca por dispositivos falhou e acionou callback.onFail.
  • O pareamento falhou e acionou pairingCallback.onFail.
  • O pareamento terminou com response.status igual a false.

Em todos os casos, registre o erro quando disponível e atualize o estado da interface com uma mensagem clara para o usuário.


Did this page help you?