有没有可能在不使用意图的情况下从卡中读取NFC标签?

Is it possible to read an NFC tag from a card without using an intent?(有没有可能在不使用意图的情况下从卡中读取NFC标签?)
本文介绍了有没有可能在不使用意图的情况下从卡中读取NFC标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Kotlin构建一个Android应用程序。我应该能够通过点击一个按钮来阅读NFC标签。在我读过的所有文档中,我看不到这样做的方法。

正常情况:在Android设备旁边设置NFC令牌(卡、芯片或其他任何东西)。设备自动打开NFC应用程序。此时,将发现意图并读取卡片。

但我如何才能在应用程序中将令牌放在设备附近,然后单击"读取"按钮,然后才能从令牌中读取信息?

推荐答案

答案是肯定的和否定的,你可以在没有意图的情况下阅读卡片,但这对点击按钮阅读没有帮助,但其他更改意味着你只能在点击按钮时阅读标签。

您没有显示如何获取意图的现有代码,也没有描述您正在读取的数据类型,因此答案会有些含糊。

需要澄清的一点是,标记检测始终由进入范围的标记启动,这始终是代码与标记交互的起点,但您可以将读取与标记检测分开。

检测和存储&的SO方法

当标签在范围内时,首先使用enableReaderMode获取回调。

例如

public class NFCActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback{

private NfcAdapter mNfcAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nfc);

        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);

        // Rest of Activity setup
     }

@Override
    protected void onResume() {
        super.onResume();

        if(mNfcAdapter!= null) {
            Bundle options = new Bundle();
            // Work around for some broken Nfc firmware implementations that poll the card too fast
            options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, 250);

            // Enable ReaderMode for all types of card and disable platform sounds
            mNfcAdapter.enableReaderMode(this,
                    this,
                    NfcAdapter.FLAG_READER_NFC_A |
                            NfcAdapter.FLAG_READER_NFC_B |
                            NfcAdapter.FLAG_READER_NFC_F |
                            NfcAdapter.FLAG_READER_NFC_V |
                            NfcAdapter.FLAG_READER_NFC_BARCODE |
                            NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK |
                            NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS,
                    options);
        }

    }

    @Override
    protected void onPause() {
        super.onPause();
        if(mNfcAdapter!= null)
            mNfcAdapter.disableReaderMode(this);
    }

关闭打开标签检测的声音,并关闭系统对任何NDEF消息的自动读取(因此用户不知道标签检测)

然后在onTagDiscovered回调方法中,您只需存储它提供给您的Tag对象,以备您按下按钮后使用。

读取标记时,使用存储的Tag对象并将其转换为一种标记技术类型

例如

Ndef mNdef = Ndef.get(tag);

// Check that it is an Ndef capable card
if (mNdef!= null) {
 NdefMessage mNdefMessage = mNdef.getNdefMessage();
}

您还必须处理许多异常,因为没有被担保人。当您按下按钮时,标签仍在范围内。

您不能真正延迟启用检测,直到您单击该按钮,因为如果您没有要求在检测到正在运行的应用程序时向其发送回调,则系统很可能会转而对标记执行某些操作。

这篇关于有没有可能在不使用意图的情况下从卡中读取NFC标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

How to target newer versions in .gitlab-ci.yml using auto devops (java 11 instead of 8 and Android 31 instead of 29)(如何在.gitlab-ci.yml中使用自动开发工具(Java 11而不是8,Android 31而不是29)瞄准较新的版本)
Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?(Android+core LibraryDesugering:我可以期待哪些Java 11API能够工作?)
How to render something in an if statement React Native(如何在If语句中呈现某些内容Reaction Native)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)
Using Firebase Firestore in offline only mode(在仅脱机模式下使用Firebase FiRestore)
Crash on Google Play Pre-Launch Report: java.lang.NoSuchMethodError(Google Play发布前崩溃报告:java.lang.NoSuchMethodError)