NFC:使用NFC标签在Android上不起作用的触碰付款

NFC: Tap & pay with NFC tags not working on Android

提问人:Shruti 提问时间:11/9/2023 最后编辑:Shruti 更新时间:11/10/2023 访问量:37

问:

将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>
Android NFC 点击支付

评论

0赞 ΓDΛ 11/10/2023
你能分享所有的清单代码吗?
0赞 Andrew 11/10/2023
你在用吗?由于 Android 12 中发生了变化,如果您正在使用它,共享您的代码会有所帮助。enableForegroundDispatchPendingIntentenableForegroundDispatch
0赞 Shruti 11/10/2023
@Andrew是的,我在 onResume() 中使用了 enableForegroundDispatch,我现在已将其添加到我的问题中。请看一下,让我知道。
0赞 Andrew 11/10/2023
这回答了你的问题吗?扫描NFC V型标签
1赞 Andrew 11/10/2023
PendingIntent.FLAG_IMMUTABLE应该是因为 NFC 服务需要能够更改 Pending intent 以添加 NFC 标签数据。When it is return to 为 null,因为无法更改 Intent。有关详细信息,请参阅 developer.android.com/guide/components/...PendingIntent.FLAG_MUTABLEonNewIntentintent.action

答:

0赞 Andrew 11/10/2023 #1

PendingIntent.FLAG_IMMUTABLE应该是因为 NFC 服务需要能够更改 Pending intent 以添加 NFC 标签数据。PendingIntent.FLAG_MUTABLE

When it is return to 为 null,因为无法更改 Intent。有关更多详细信息,请参阅文档onNewIntentintent.action