Я разрабатываю приложение для Android, которое должно взаимодействовать с пользовательским устройством через NFC. Приложение Android работает как эмулируемая карта (HCE), а устройство выполняет роль читателя.
Все работает, когда телефон заблокирован (экран включен), но HostApduService не вызывается, когда телефон разблокирован.
AndroidManifest.xml
...
<uses-permission android:name="android.permission.NFC" />
<uses-feature
android:name="android.hardware.nfc.hce"
android:required="false" />
...
<service
android:name=".communication.nfc.NfcService"
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" />
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice" />
</service>
apduservice.xml
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/nfcServiceDescription"
android:requireDeviceUnlock="false">
<aid-group
android:category="other"
android:description="@string/nfcServiceApertura">
<aid-filter android:name="F70FC6AAAAAAA" />
</aid-group>
</host-apdu-service>
Услуги
class NfcService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
val text = "processCommandApdu: " + commandApdu.asHexString()
log(text)
}
override fun onDeactivated(reason: Int) {
val text = "onDeactivated: $reason"
log(text)
}
private fun log(mensaje: String) {
Log.i(TAG, mensaje)
}
companion object {
const val TAG = "APDU"
}
}
NfcService.processCommandApdu
вызывается, когда экран телефона заблокирован и включен, но он не вызывается, когда телефон разблокирован. Я хочу, чтобы он работал в обоих состояниях (заблокирован и разблокирован)