Android NFC仅在按钮点击时读取标签

时间:2015-05-20 10:20:43

标签: android button nfc

我正在慢慢学习Android。目前我在NFC上,我已经学习了几个教程,我开始更好地了解它是如何工作的以及如何读写标签,我现在可以对我买的那些做什么。 大多数人希望他们的应用程序在接近标签时立即启动,但出于学习目的,我只想在按下按钮时启动发现,换句话说,我想控制发现。 我知道为了让应用程序立即启动,我们在Manifest.xml中实现了过滤器ACTION_NDEF_DISCOVERED 我还读到,只有当我们的应用程序不在前台时才会使用意图过滤。如果我们的应用程序在前台运行,它将不会被通知,因此我们必须使用NFC前台调度。

我无法弄清楚我是如何操纵过滤器和前景的,以便它们只对我点击按钮做出反应。

我的另一个问题是:它是否适用于读取和写入按钮?

有人可以帮忙吗?如果你给我一些代码,请好好解释一下,我真的在学习和理解之后: - )

干杯。

1 个答案:

答案 0 :(得分:1)

看看这个名为NDEF工具的库 - link

我前段时间使用它,在按钮点击时读取和写入NFC标签。看看图书馆和我的代码,然后玩它。

public class NFCReadActivity extends NfcReaderActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read_nfc);

        // Read the tag, without prompting how/who should read it
        setDetecting(true);
    }

    @Override
    protected void readNdefMessage(Message message)
    {
        if (message != null)
        {
            // Iterate through all records in message
            for (int k = 0; k < message.size(); k++)
            {
                Record record = message.get(k);

                // Get record type (record.getClass().getSimpleName())
                if (record instanceof TextRecord)
                {
                    // Get NFC message
                    String message = ((TextRecord) record).getText();

                    // Inform user
                    Crouton.makeText(this, message, Style.CONFIRM).show();
                }
            }
        }
    }

    // An empty NDEF message was read
    @Override
    protected void readEmptyNdefMessage()
    {
        Crouton.makeText(this, getString(R.string.NFC_empty_message), Style.ALERT).show();
    }

    // Something was read via NFC, but it was not an NDEF message
    @Override
    protected void readNonNdefMessage()
    {
        Crouton.makeText(this, getString(R.string.NFC_non_ndef_message), Style.ALERT).show();
    }

    // NFC feature was found and is currently enabled
    @Override
    protected void onNfcStateEnabled()
    {

    }

    // NFC feature was found but is currently disabled
    @Override
    protected void onNfcStateDisabled()
    {
        Crouton.makeText(this, getString(R.string.NFC_state_disabled), Style.ALERT).show();
        new GoToSettingsDialog(this).showNFCSettings();
    }

    // NFC setting changed since last check. For example, the user enabled NFC in the wireless settings
    @Override
    protected void onNfcStateChange(boolean enabled)
    {

    }

    // This device does not have NFC hardware
    @Override
    protected void onNfcFeatureNotFound()
    {
        Crouton.makeText(this, getString(R.string.NFC_not_found), Style.ALERT).show();
    }
}