> For the complete documentation index, see [llms.txt](https://docs.payments.thalescloud.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payments.thalescloud.io/nfc-wallet-sdk-android/es/help/knowledge-base/control-nfc-payments-on-android.md).

# Controlar pagos NFC en Android

## Resumen

La configuración del sistema Android puede bloquear los pagos sin contacto, incluso cuando su **aplicación de billetera digital** es correcto.

Esta página cubre los controles de Android que afectan los pagos NFC, además de los requisitos por parte de la aplicación para admitirlos.

## Configuraciones del dispositivo que afectan los pagos NFC

### Conmutador de NFC

Android proporciona un interruptor maestro de NFC, similar al Wi‑Fi o datos móviles.

El NFC debe estar activado para ejecutar pagos sin contacto. Los usuarios finales también pueden desactivar el NFC para bloquear los pagos.

<figure><img src="/files/a0d6f2ee55c24f2b9ef747d22a27eb3885deb36c" alt=""><figcaption><p>Ejemplo: conmutador de NFC en Configuración rápida</p></figcaption></figure>

### Requerir desbloqueo del dispositivo (Android 12+)

En algunos dispositivos (Android 12+), el NFC puede configurarse para funcionar solo cuando el dispositivo está desbloqueado.

Si está habilitado, el usuario final debe desbloquear el dispositivo antes de tocar.

<figure><img src="/files/a06f43a8cccc9287a49d42fc123b722db5e70b9a" alt=""><figcaption><p>Ejemplo: opción para requerir un dispositivo desbloqueado para NFC</p></figcaption></figure>

### Selección de fuente de la aplicación (específico del fabricante)

Algunos dispositivos admiten múltiples “ubicaciones de pago” (por ejemplo, elemento seguro frente a HCE).

El hardware del dispositivo enruta los comandos NFC entrantes a la ubicación seleccionada.

<div data-with-frame="true"><figure><img src="/files/7eb3322821f6237e96df9fea02bc61a1a40e995a" alt=""><figcaption><p>Ejemplo: selección de fuente de la aplicación para pagos sin contacto</p></figcaption></figure></div>

{% hint style="info" %}
El SDK de Cartera NFC utiliza la emulación de tarjeta basada en host (HCE).

Si el dispositivo expone una configuración de fuente de la aplicación, indique a los usuarios finales que seleccionen una opción equivalente a **Billetera HCE**.
{% endhint %}

### Aplicación de pago predeterminada

Android permite que el usuario final elija la aplicación de pago predeterminada para Tocar y Pagar.

<figure><img src="/files/6a3049d43804817f30cd9e1aee079628599ea8a4" alt=""><figcaption><p>Ejemplo: configuración de aplicación de pago predeterminada</p></figcaption></figure>

{% hint style="info" %}
Algunos dispositivos también muestran un interruptor como **Pagar con la aplicación abierta actualmente**.

Esto requiere soporte en la aplicación. Ver [Admitir “Pagar con la aplicación abierta actualmente”](#support-pay-with-currently-open-app).
{% endhint %}

## Requisitos de la aplicación de billetera digital (HCE)

Tu **aplicación de billetera digital** debe declarar un servicio HCE.

El SDK de Cartera NFC no declara el servicio HCE por ti. Proporciona `AbstractHCEService` para simplificar la implementación.

Para obtener antecedentes, consulte [Descripción general de la emulación de tarjetas basada en host](https://developer.android.com/guide/topics/connectivity/nfc/hce).

### Detectar y solicitar la aplicación de pago predeterminada

Al iniciar, se recomienda:

* Comprobar si tu servicio HCE es el predeterminado, usando [CardEmulation#isDefaultServiceForCategory](https://developer.android.com/reference/android/nfc/cardemulation/CardEmulation#isDefaultServiceForCategory\(android.content.ComponentName,%20java.lang.String\)).
* Si no lo es, solicite al usuario final que establezca su aplicación como el servicio de pago predeterminado iniciando [CardEmulation#ACTION\_CHANGE\_DEFAULT](https://developer.android.com/reference/android/nfc/cardemulation/CardEmulation#ACTION_CHANGE_DEFAULT).

```java
Intent intentSetDefaultTapNPay = new Intent();
intentSetDefaultTapNPay.setAction(ACTION_CHANGE_DEFAULT);
intentSetDefaultTapNPay.putExtra(EXTRA_SERVICE_COMPONENT, new ComponentName(this, CANONICAL_PAYMENT_SERVICENAME));
intentSetDefaultTapNPay.putExtra(EXTRA_CATEGORY, CATEGORY_PAYMENT);
startActivity(intentSetDefaultTapNPay);
```

Android muestra un cuadro de diálogo del sistema. No puedes cambiar su texto, excepto la etiqueta de tu aplicación.

<figure><img src="/files/d02dd219fc4326b677651293f2a766eefe20cf1d" alt=""><figcaption><p>Ejemplo: diálogo de Android para cambiar la aplicación de pago predeterminada</p></figcaption></figure>

Para observar la elección del usuario, llama a `startActivityForResult` y comprueba el resultado en `onActivityResult`:

```java
private void checkAndSetTapNPayDefault() {
  // ...
  startActivityForResult(intentSetDefaultTapNPay, REQ_CODE_TAP_N_PAY_SET_DEFAULT);
}

@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
  if (requestCode == REQ_CODE_TAP_N_PAY_SET_DEFAULT) {
    if (resultCode == RESULT_OK) {
      // el usuario seleccionó 'Reemplazar'
    } else {
      // el usuario seleccionó 'No'
    }
  }
}
```

### Controla cómo aparece tu aplicación en la configuración de Android

La interfaz de Tocar y Pagar / Pagos sin contacto varía según el fabricante, el modelo y la versión de Android.

<figure><img src="/files/31e081b01bc8fe535a19f0552848166f4c30198a" alt=""><figcaption><p>Ejemplo: diferencias en la interfaz de Tocar y Pagar entre dispositivos</p></figcaption></figure>

Android rellena la entrada de tu aplicación usando recursos de:

* `AndroidManifest.xml`
* Tu recurso de metadatos del servicio de pago (declarado vía `/manifest/application/service/meta-data/@android:resource`)

Puedes controlar:

* **Icono de la aplicación**: `/manifest/application/@android:icon`
* **Banner del servicio de pago**: metadatos del servicio de pago, `/host-apdu-service/@android:apduServiceBanner`
* **Etiqueta del servicio de pago**: `/manifest/application/service/@android:label`
  * Esta etiqueta también se utiliza en el diálogo “establecer aplicación de pago predeterminada”.
* **Descripción del servicio de pago**: metadatos del servicio de pago, `/host-apdu-service/@android:description`

No puedes controlar el orden de las aplicaciones en la lista.

### Pagar con la aplicación en primer plano

Algunos dispositivos exponen una configuración como **Pagar con la aplicación abierta actualmente** o **Priorizar la aplicación que se está ejecutando actualmente**.

Esta configuración solo significa que el usuario final permite que las aplicaciones en primer plano anulen el servicio de pago predeterminado. No hace cumplir ese comportamiento.

Para aprovecharlo, implementa [CardEmulation#setPreferredService](https://developer.android.com/reference/android/nfc/cardemulation/CardEmulation#setPreferredService\(android.app.Activity,%20android.content.ComponentName\)) y [CardEmulation#unsetPreferredService](https://developer.android.com/reference/android/nfc/cardemulation/CardEmulation#unsetPreferredService\(android.app.Activity\)) siguiendo las directrices de Android.

{% hint style="info" %}
El `Actividad` pasado a `setPreferredService(...)` debe estar en un estado reanudado.

Llamar `setPreferredService(...)` en [Activity#onResume](https://developer.android.com/reference/android/app/Activity#onResume\(\)).

Llamar `unsetPreferredService(...)` en [Activity#onPause](https://developer.android.com/reference/android/app/Activity#onPause\(\)).

Use [CardEmulation#categoryAllowsForegroundPreference](https://developer.android.com/reference/android/nfc/cardemulation/CardEmulation#categoryAllowsForegroundPreference\(java.lang.String\)) para detectar si la preferencia de primer plano está permitida para la categoría de pago.
{% endhint %}

Recomendaciones:

* Comprueba que la preferencia de primer plano esté habilitada usando `CardEmulation.categoryAllowsForegroundPreference(CATEGORY_PAYMENT)`.
* Implementa la anulación de la aplicación predeterminada como se explicó anteriormente.
* Avisa a los usuarios finales sobre una experiencia de pago inconsistente si tu aplicación de billetera digital maneja transacciones sin contacto solo cuando está en primer plano .


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.payments.thalescloud.io/nfc-wallet-sdk-android/es/help/knowledge-base/control-nfc-payments-on-android.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
