问题描述
我的代码中存在以下问题 我不能在我的 nfc 标签上写超过 4 页,而且唯一可以写的数据是只有字母且长度不超过 4 的字符串。该标签有一个可写的大小为 888 字节。
类 HomeActivity : AppCompatActivity() {
lateinit var adapter: NfcAdapter
lateinit var mifareTester: MymifareUltralightTagTester
lateinit var mytag: Tag
lateinit var intentFiltersArray: Array<IntentFilter>
lateinit var pendingIntent: PendingIntent
val techListsArray = arrayOf(arrayOf<String>(NfcF::class.java.name))
lateinit var resultText: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
mifareTester = MymifareUltralightTagTester()
adapter = NfcAdapter.getDefaultAdapter(this)
resultText = findViewById<TextView>(R.id.textView)
val intent = Intent(this,javaClass).apply {
addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
}
pendingIntent = PendingIntent.getActivity(this,intent,0)
val ndef = IntentFilter(NfcAdapter.ACTION_NDEF_disCOVERED).apply {
try {
addDataType("*/*")
} catch (e: IntentFilter.MalformedMimeTypeException) {
throw RuntimeException("fail",e)
}
}
intentFiltersArray = arrayOf(ndef)
}
public override fun onPause() {
super.onPause()
adapter.disableForegrounddispatch(this)
}
public override fun onResume() {
super.onResume()
adapter.enableForegrounddispatch(this,pendingIntent,intentFiltersArray,techListsArray)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
val tagFromIntent: Tag? = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)
if (tagFromIntent != null) {
mifareTester.writeTag(tagFromIntent,"RaumDaumHausLaus")
}
mifareUltralight.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG))
resultText.text = mifareTester.readTag(tagFromIntent)
}
}
class MymifareUltralightTagTester {
fun writeTag(tag: Tag,tagText: String) {
var splittedString = splitStringEvery(tagText,4)
var pageOffset = 4
mifareUltralight.get(tag)?.use { ultralight ->
ultralight.connect()
Charset.forName("US-ASCII").also { usAscii ->
for(str in splittedString){
ultralight.writePage(pageOffset++,str?.toByteArray(Charsets.US_ASCII))
}
}
}
}
fun readTag(tag: Tag?): String? {
return mifareUltralight.get(tag)?.use { mifare ->
mifare.connect()
val payload = mifare.readPages(4)
String(payload,Charset.forName("US-ASCII"))
}
}
fun splitStringEvery(s: String,interval: Int): Array<String?> {
val arrayLength = ceil(s.length / interval.todouble()).toInt()
val result = arrayOfNulls<String>(arrayLength)
var j = 0
val lastIndex = result.size - 1
for (i in 0 until lastIndex) {
result[i] = s.substring(j,j + interval)
j += interval
}
result[lastIndex] = s.substring(j)
return result
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)