我的项目需要使用Android设备从Suica读取交易历史记录数据,不仅是从物理卡上,而且是从通过某些应用程序与卡集成在一起的移动设备上。对于后面的例子,有一个iPhone上的Suica应用程序,它可以连接到Apple Pay服务link。
我的方法只是在两种情况下都使用Android NFC API。我们相信具有Suica应用程序的物理卡和移动设备实际上都可以视为NFC-F(Felica)标签。 Suica应用程序可以在卡仿真模式下有效运行,不是吗?
问题在于,SDK版本高达Android 6.0(API级别23)的Android设备从物理卡或移动设备读取数据时几乎没有区别,但对于Android版本7.0(API级别)的SDK版本的Android设备24),它几乎无法将移动设备检测为NFC-F标签,因此我们基本上无法从中读取数据。
也许Android SDK中有一些更改导致了此问题,但是我不知道它们是什么,或者如何找到它们。谁可以给我解释一下这个 ?我已经发布了与Teratail类似的question,但没有答案。
-------------更新于2019/05/01 -------------
看一下Android SDK源代码,事实证明,从SDK Android 7.0版本开始,就添加了用于CardEmulation的HostNfcFService。可能不是巧合,但我还无法弄清楚。 Github link
<!-- Scan activity -->
<activity
android:name="xxxx.ScanActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
<!-- NFC TAG -->
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcF</tech>
</tech-list>
</resources>
答案 0 :(得分:0)
是的,模拟的Suica的行为几乎应与物理行为完全一样,并且您应该能够访问其余额和历史记录(假设使用真实卡也可以做到这一点;我对Suica的访问不了解太多配置)。
您是否尝试过在Android NFC API中启用reader mode?
这会禁用读取设备上的各种功能(例如Android Beam,卡仿真模式),这可能会干扰对目标设备上仿真卡的访问。