我有一张带有小程序(cardlet)的 SIM 卡。如果我可以将 Android 设备中的默认安全元素设置为 UICC,我可以通过非接触式接口向 UICC 发送命令。
我的 NFC 阅读器向 NFC 控制器发送一个带有“SELECT AID A0000001234567890”的 APDU,NFC 控制器将把它发送到 UICC 安全元件上的我的小程序(已处理访问控制)。
现在我想为无法将默认安全元素设置为 UICC 的设备使用此功能。
如果我理解正确,因为原则上我不需要 Android 应用程序,我仍然必须使用一个虚拟的 Android 应用程序并在其清单中声明一个所谓的“脱离主机服务”。
有人可以指导我如何将选择安装在安全元件上的小程序的 AID 的 APDU 和后续 APDU 路由到 UICC 安全元件吗?
这是我的第一次尝试,但也许有人对我有一个工作示例或一些指导/更正。
AndroidManifest.xml:
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc.hce" android:required="true" />
<service android:name=".OffHostApduService" android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.OFF_HOST_APDU_SERVICE"/>
</intent-filter>
<meta-data android:name="android.nfc.cardemulation.off_host_apdu_service"
android:resource="@xml/apduservice"/>
<uses-feature android:name="android.hardware.nfc.hce" android:required="true" />
</service>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Echo">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<uses-library
android:name="com.android.nfc_extras"
android:required="true" />
</activity>
</application>
apduservices.xml:
<offhost-apdu-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/servicedesc">
<aid-group android:description="@string/subscription" android:category="payment">
<aid-filter android:name="A0000001234567890"/>
</aid-group>
</offhost-apdu-service>