提问人:Shruti 提问时间:11/9/2023 最后编辑:Shruti 更新时间:11/10/2023 访问量:37
NFC:使用NFC标签在Android上不起作用的触碰付款
NFC: Tap & pay with NFC tags not working on Android
问:
将Android版本从11迁移到12后,带有NFC标签的Tap & Pay功能停止工作。
使用以下代码,在点击NFC标签时,NFC启用区域中的设备正在振动,但之后没有任何反应。 以前,当目标 SDK 为 30 时,此功能是端到端的,即适用于 Android 版本 11。 在下面分享我的代码,请帮我找到代码中遗漏的内容以及可能的解决方案,谢谢!
NFCBase活动
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) {
val rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)
if (rawMsgs != null) {
onTagTapped(NfcUtil.getSuperTagId(intent), NfcUtil.getSuperTagData(rawMsgs))
} else{
onTagTapped(NfcUtil.getSuperTagId(intent), null)
}
}
}
从 onResume() 调用以下方法
protected fun enableNfcForegroundDispatch(environment: String) {
try {
val intentFiltersArray = NfcUtil.getIntentFilters(environment)
val intent = Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
val nfcPendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)
adapter?.enableForegroundDispatch(this, nfcPendingIntent, intentFiltersArray, null)
} catch (ex: IllegalStateException) {
Timber.e(ex, "Error enabling NFC foreground dispatch")
}
}
Android清单
<!--Need this feature to use NFC functionality -->
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<!-- Need this permission to read nfc tags in foreground-->
<uses-permission
android:name="android.permission.NFC"
android:required="false" />
.
.
.
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />
</intent-filter>
答:
0赞
Andrew
11/10/2023
#1
PendingIntent.FLAG_IMMUTABLE
应该是因为 NFC 服务需要能够更改 Pending intent 以添加 NFC 标签数据。PendingIntent.FLAG_MUTABLE
When it is return to 为 null,因为无法更改 Intent。有关更多详细信息,请参阅文档onNewIntent
intent.action
评论
enableForegroundDispatch
PendingIntent
enableForegroundDispatch
PendingIntent.FLAG_IMMUTABLE
应该是因为 NFC 服务需要能够更改 Pending intent 以添加 NFC 标签数据。When it is return to 为 null,因为无法更改 Intent。有关详细信息,请参阅 developer.android.com/guide/components/...PendingIntent.FLAG_MUTABLE
onNewIntent
intent.action