NFC:使用 NFC 标签点击并付款在 Android 上不工作

问题描述 投票:0回答:1

将 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>
android nfc tap-payment
1个回答
0
投票

PendingIntent.FLAG_IMMUTABLE
应为
PendingIntent.FLAG_MUTABLE
,因为 NFC 服务需要能够更改待处理意图以添加 NFC 标签数据。

当返回

onNewIntent
时,
intent.action
为null,因为Intent无法更改。请参阅文档了解更多详细信息

© www.soinside.com 2019 - 2024. All rights reserved.