当我编译/构建我的应用程序时,它会创建我的APK而没有任何错误。此外,在Android Studio中,我没有错误通知。所以我希望该应用程序能够运行。但是,当我安装并打开应用程序时,只要我扫描NFC标签,就会收到错误消息“很遗憾BMT_Admin已停止工作”。
我唯一要做的就是将外部记录写入标签,称为“有效负载”,然后还将AAR(Android应用程序记录)写入可由将来扫描调用的标记。我正在使用的代码如下:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if(intent.hasExtra(NfcAdapter.EXTRA_TAG))
{
Toast.makeText(this, "NFC Scan", Toast.LENGTH_SHORT).show();
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] payload = "my string_tag1".getBytes();
NdefRecord[] ndefRecords = new NdefRecord[0];
ndefRecords[0] = NdefRecord.createExternal("nfctutorials", "externaltype", payload);
ndefRecords[1] = NdefRecord.createApplicationRecord("com.example.myapp");
NdefMessage ndefMessage = new NdefMessage(ndefRecords);
writeNdefMessage(tag, ndefMessage);
}
}
我假设我在这里做的事情是不正确的,当我尝试扫描标签时会抛出错误。但我不知道那可能是什么。
答案 0 :(得分:0)
如果您期望获得真正的帮助(除了疯狂的猜测),您需要显示错误消息(即来自ADB日志的堆栈跟踪)和相关的代码部分。
除此之外,根据您在问题中的代码,最可能的原因可能是行
NdefRecord[] ndefRecords = new NdefRecord[0];
在那里,您创建一个空数组。但是,在接下来的两行中,您尝试访问不存在的索引0和1:
ndefRecords[0] = NdefRecord.createExternal("nfctutorials", "externaltype", payload);
ndefRecords[1] = NdefRecord.createApplicationRecord("com.example.myapp");
这显然会导致ArrayIndexOutOfBounds
异常,因为0和1超出了空数组的末尾。
因此,您需要将数组分配更改为
NdefRecord[] ndefRecords = new NdefRecord[2];
为两个数组元素分配空间。