将 Android 版本从 11 迁移到 12 后,带有 NFC 标签的点击付款功能停止工作。
使用以下代码,在启用 NFC 的区域中点击 NFC 标签时,设备会振动,但之后没有任何反应。 以前,当目标 SDK 为 30(即 Android 版本 11)时,此功能可以端到端运行。 下面分享我的代码,请帮我找到代码中遗漏的内容以及可能的解决方案,谢谢!
NFCBaseActivity
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")
}
}
AndroidManifest
<!--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>
PendingIntent.FLAG_IMMUTABLE
应为 PendingIntent.FLAG_MUTABLE
,因为 NFC 服务需要能够更改待处理意图以添加 NFC 标签数据。
当返回
onNewIntent
时,intent.action
为null,因为Intent无法更改。请参阅文档了解更多详细信息