Android NFC-HCE HostApduService не вызывается, когда телефон разблокирован - PullRequest
1 голос
/ 21 мая 2019

Я разрабатываю приложение для 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 вызывается, когда экран телефона заблокирован и включен, но он не вызывается, когда телефон разблокирован. Я хочу, чтобы он работал в обоих состояниях (заблокирован и разблокирован)

...