# Verificando o Status do POS

Antes de iniciar uma transação, você pode verificar se o aplicativo Tap on Phone está inicializado corretamente e pronto. Para fazer isso, você envia uma solicitação de status usando um Broadcast do Android.

Este guia mostra como solicitar o status atual do Ponto de Venda (POS) e como gerenciar a resposta.

## Passo 1: Registrar um Broadcast Receiver

O aplicativo Tap on Phone processa sua solicitação de status de forma assíncrona e retorna o resultado via um broadcast. Você deve registrar um `BroadcastReceiver` para escutar esta resposta.

Você pode escutar a ação de resposta padrão (`com.dejamobile.cbp.sps.STATUS_BROADCAST_RESPONSE`) ou definir um nome de ação personalizado.

```
// Define your broadcast action (default or custom)
val responseAction = "com.dejamobile.cbp.sps.STATUS_BROADCAST_RESPONSE"

val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        val status = intent?.getStringExtra("Status") ?: "Unknown"
        val info = intent?.getStringExtra("Info") ?: ""

        when (status) {
            "Initialized" -> println("POS is ready to process payments.")
            "None" -> println("POS is not initialized. Call InitActivity first.")
            "Failed" -> println("The status request failed. Try launching the POS app and retry.")
            else -> println("Unknown status received.")
        }

        // Unregister the receiver once handled
        context?.unregisterReceiver(this)
    }
}

// Register the receiver
val filter \= IntentFilter(responseAction)
registerReceiver(receiver, filter)
```

## Passo 2: Enviar o Broadcast de Status

Assim que o seu receiver estiver escutando, construa e envie o intent de broadcast para solicitar o status.

Você deve especificar o pacote do Tap on Phone e a classe `StatusBroadcastReceiver`.

```
val intent = Intent().apply {
    action = "com.dejamobile.cbp.sps.STATUS_BROADCAST"
    component = ComponentName(
        "com.dejamobile.cbp.sps.app",
        "com.dejamobile.cbp.sps.app.broadcast.StatusBroadcastReceiver"
    )
    addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)

    // Optional: Specify your custom response action
    // putExtra("ResponseAction", responseAction)
}

// Send the broadcast
sendBroadcast(intent)
```

## Parâmetros de Resposta de Status

Quando o seu receiver captura a resposta, o intent contém vários extras. O mais importante é a string `Status`, que determina se você pode prosseguir com um pagamento.

| Valor de Status | Significado |
| :---- | :---- |
| `Initialized` | O app POS foi inicializado com sucesso e está pronto para processar transações. |
| `None` | O app POS não está inicializado. Você deve iniciar a `InitActivity` antes de processar pagamentos. |
| `Failed` | A solicitação falhou. Tente abrir o aplicativo POS manualmente e tente novamente. |

Se o status for `Initialized`, o intent de resposta também inclui os seguintes extras opcionais:

* `merchantId`: O ID do lojista atual.  
* `userId`: O ID do usuário atual.  
* `merchantContractCode`: O código de contrato do lojista atual.

<Callout type="tip">

Use o broadcast de status para garantir que o POS esteja pronto quando o seu aplicativo for retomado (`onResume`). Se o status retornar `None`, redirecione o lojista para o seu fluxo de inicialização.

</Callout>