我正在try 编写一个应用程序,将消息/命令写入NFC标签,并在不断开字段连接的情况下读回NdeMessage.

它在我试过的所有手机和安卓操作系统版本上都运行得很好,除了它在任何安卓13手机上都不起作用,在写入之后读取NdeMessage会返回空.

我不会发布整个代码,它基本上归结为以下几行:

var message = NdefMessage(NdefRecord.createTextRecord("en", command))

ndef.connect()
ndef.writeNdefMessage(message)

val ndefMessage = ndef.getNdefMessage() --> returns null on Android 13, ndefMessage on all other OS versions

会感激我所能得到的一切帮助.

我try 过使用前台调度、带有各种EXTRA_READER_Presence_CHECK_DELAY值的阅读器模式,try 让线程Hibernate ,在有一些Hibernate 的循环中阅读消息,直到它可能最终会阅读它为止,在整个操作中使用单独的后台线程,禁用其他NFC应用程序,支付应用程序……毫无办法.

这显然是安卓13的某种变化,因为我也try 了安卓12的手机,它像预期的那样工作,手机升级到安卓13,之后就不能工作了.

请注意,标签绝对是正确写入的,因为如果我在中间添加Close/Connect并在重新进入字段时读取标签,或者只是在其他NFC应用程序中写入消息并读取标签,它就会正确读取.

推荐答案

解决了.

在写入和后续读取之间,需要关闭,再次获取ndef,然后再次连接:

ndef.connect()
ndef.writeNdefMessage(message)

ndef.close()
ndef = Ndef.get(tag)
ndef.connect()

val ndefMessage = ndef.getNdefMessage()

Android相关问答推荐

如何使用Jetpack Compose实现此底表?

BroadCastReceiver的onReceive方法中的Intent上的Extras为空

Jetpack Compose中尺寸不断增加的动画

有没有什么方法可以让Beeware在安卓手机上显示图片?

Android Studio SQLite 错误:列不正确(没有这样的列:_id)

使用 Gadle kotlin 为多模块 Android 代码库设置 jacoco

使用不同的gradle文件导入外部库

Jetpack Compose 如何使一个项目相对于另一个项目垂直居中

Kotlin 协程、 retrofit 、android

AirDroid Business 如何能够从屏幕截图中排除覆盖?

如何只允许拖动 BottomSheetScaffold 中 BottomContent 的 SheetPeek 的一部分?

如何关闭可组合对话框?

错误:构建 react-native 应用程序时包 com.facebook.react.bridge 不存在

java.lang.String 类型的值 Forbidden 无法转换为 JSONObject

协程是否在 if 条件下保持秩序?

在 android list 中添加 IsMonitoringTool 元数据标志的位置

Kotlin Compose 全局页脚视图

Android TTS 在屏幕关闭一段时间后停止朗读

Android Jetpack Compose:如何让文本利用完整的行空间并将单词换行以防溢出?

SavedStateViewModelFactory 用空构造函数构造