它是我在HCE应用程序中的文件apduservice.xml:
<?xml version="1.0" encoding="utf-8"?>
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:requireDeviceUnlock="false">
<aid-group android:category="other">
<aid-filter android:name="00000000000401"/>
</aid-group>
</host-apdu-service>
我还尝试在此文件中更改属性android:requireDeviceUnlock,如下所示:
android:requireDeviceUnlock="true"
并尝试运行没有此属性的应用程序
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android">
<aid-group android:category="other">
<aid-filter android:name="F0405400400337"/>
</aid-group>
</host-apdu-service>
但没有改变。我的应用程序仅在显示器解锁时才有效,当显示器熄灭时,我的processCommandApdu方法没有命令。
来自文档:
requireDeviceUnlock属性可用于指定 必须先解锁设备,然后才能调用此服务进行处理 的APDU。
HCE服务可以在锁定屏幕上运行,但是:这是 由android:requireDeviceUnlock属性控制 您的HCE服务的标签。默认情况下,设备解锁 不是必需的,即使设备也会调用您的服务 被锁定了。
如果将android:requireDeviceUnlock属性设置为&#34; true&#34;对于 您的HCE服务,Android将提示用户解锁设备 当您点击NFC阅读器选择已解析的AID时 你的服务。解锁后,Android会显示一个对话框提示 用户再次点击以完成交易。这是必要的 因为用户可能已将设备从NFC读卡器移开 为了解锁它。
我做错了什么?请帮帮我!
答案 0 :(得分:3)
Android HCE-Service仅在您的屏幕实际开启时才有效。
From the HostApduService Documentation:
当设备的屏幕关闭时,当前的Android实施方案会完全关闭NFC控制器和应用程序处理器。因此,当屏幕关闭时,HCE服务将不起作用。 然而,HCE服务可以从锁定屏幕运行:这由您的HCE服务标签中的android:requireDeviceUnlock属性控制。默认情况下,不需要设备解锁,即使设备已锁定,也会调用您的服务。
如果屏幕 on 并且您的ApduService收到命令,则android:requireDevice属性仅询问锁屏。此外,用户必须设置锁屏。
我希望这会有所帮助