Android:enableReaderMode-未调用ReaderCallback

[删除(380066935@qq.com或微信通知)]

更好的阅读体验请查看原文:https://www.5axxw.com/questions/content/hj8ixv

我对android中的NFC阅读器模式有问题。我可以启用读卡器模式,但从不调用onTagDiscovered回调。手机识别出标签,很快就会振动。

这里是我的代码:

try {

    val nfcAdapter = NfcAdapter.getDefaultAdapter(this);

    if (nfcAdapter == null) {
        Toast.makeText(this, "No NFC module :-(", Toast.LENGTH_SHORT).show();

    } else if (!nfcAdapter.isEnabled) {
        Toast.makeText(this, "NFC not enabled :-(", Toast.LENGTH_SHORT).show();

    } else {
        val options = Bundle()
        options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, 5000)

        nfcAdapter.enableReaderMode(
            this,
            NfcAdapter.ReaderCallback() {
                fun onTagDiscovered(tag: Tag) {
                    Log.println(Log.DEBUG, null, "Discovered!");
                }
            },
            NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_NFC_B or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
            options
        );

        Log.println(Log.DEBUG, null, "Reader Mode");

    }
} catch (e: Exception) {
    Log.println(Log.ERROR, null, e.toString());
}

问题在于回调的范围

我没有尝试以这种方式调用回调,我通常在活动范围内实现它,我不知道这是否也会导致问题

这已经过测试,将回调方法定义为nfcAdapter.enableReaderMode调用的一部分不起作用,接口应该在Activity范围内实现

e.g.

class MainActivity : NfcAdapter.ReaderCallback, AppCompatActivity() {
  override fun onTagDiscovered(tag: Tag) {
                    Log.println(Log.DEBUG, null, "Discovered!");
                }

then

nfcAdapter.enableReaderMode(
            this,
            this,
            NfcAdapter.FLAG_READER_NFC_A or 
            NfcAdapter.FLAG_READER_NFC_B or 
            NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
            options
        );