使用该MifareUltralight.writePage()方法的正确方法是什么?
查询该getMaxTransceiveLength()方法返回 253 个字节。然而,该标签以 888 字节进行广告。是transceive(),因此writePage()应该被调用多次?正在写入的有效负载的大小为 457 字节。
val jsonString = Gson().toJson(casualty)
val casualtyBytes = toBlob(casualty)
var currentPage = PAGE_OFFSET
val pageBytes = ByteArray(MifareUltralight.PAGE_SIZE)
var byteIndex = 0
for(i in 0 until casualtyBytes.size){
pageBytes[byteIndex] = casualtyBytes[i]
byteIndex++
if(byteIndex == 4 || i == (casualtyBytes.size-1)) {
tag.writePage(currentPage, pageBytes)
currentPage++
byteIndex = 0
}
}
fun toBlob(item : Any) : ByteArray{
val bos = ByteArrayOutputStream()
val gzip = GZIPOutputStream(bos) //compress
val oos = ObjectOutputStream(gzip)
oos.writeObject(item)
oos.close()
return bos.toByteArray()
}
例外
java.io.IOException: Transceive failed
at android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:52)
at android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)
at android.nfc.tech.MifareUltralight.writePage(MifareUltralight.java:193)
at some.package.nfc.NfcCasualtyPublisher.writeToTag(NfcCasualtyPublisher.kt:42)
at some.package.nfc.NfcCasualtyPublisher.access$writeToTag(NfcCasualtyPublisher.kt:11)
at some.package.nfc.NfcCasualtyPublisher$publishCasualty$1.run(NfcCasualtyPublisher.kt:21)
at java.lang.Thread.run(Thread.java:818)
温温酱
相关分类