如何在Android中编写NFC标签

这篇文章介绍了如何在Android中使用NFC编写智能标签 。 Android智能手机不仅能够
读取包含URL,电话号码数据的NFC标签,但可以使用Android NFC Api编写NFC标签。 在本文中,我们将探讨如何使用Android Api编写NFC智能标记。

Android NFC作家

什么是NFC技术?

在深入探讨如何在Android中使用NFC的细节之前,先介绍一下什么是NFC技术是很有用的。

近场技术(NFC)是一种在支持此技术的两个兼容设备之间实现短距离通信的技术。 NFC要求一台设备充当发送器,另一台设备充当接收器。 支持NFC的设备可以分为两类:

  • 活性
  • 被动

有源NFC设备能够发送和接收数据,并且可以与无源设备交换数据。 无源设备可以在没有电源的情况下将数据发送到其他启用NFC的设备。 典型的无源设备是NFC标签,例如可以用作广告系统。

NFC技术可在最新的Android智能手机上使用,并且NFC标签用于主动广告,智能支付等。了解如何在Android中编写NFC标签非常重要。

开始使用NFC

启用NFC的Android应用程序应该做的第一件事是验证NFC是否存在以及是否处于活动状态:

@Override
protected void onCreate(Bundle savedInstanceState) {
   ... 
   nfcMger = new NFCManager(this);
   ..
}

哪里
nfcManager是使用NfcAdapter处理NFC详细信息和实现的类:

public class NFCManager {

    private Activity activity;
    private NfcAdapter nfcAdpt;

    public NFCManager(Activity activity) {
        this.activity = activity;
    }

    public void verifyNFC() throws NFCNotSupported, NFCNotEnabled {

        nfcAdpt = NfcAdapter.getDefaultAdapter(activity);

        if (nfcAdpt == null)
            throw new NFCNotSupported();

        if (!nfcAdpt.isEnabled())
            throw new NFCNotEnabled();

    }
}

只是想回想一下,如果您还没有阅读NFC入门指南,则需要注册android应用,以便当Android设备靠近NFC标签时它会收到通知。 要启用此通知,我们必须使用
NFC前台调度

@Override
protected void onResume() {
  super.onResume();
  try {
    nfcMger.verifyNFC();
    Intent nfcIntent = new Intent(this, getClass());
    nfcIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, nfcIntent, 0);
    IntentFilter[] intentFiltersArray = new IntentFilter[] {};
    String[][] techList = new String[][] { 
                { android.nfc.tech.Ndef.class.getName() },  
                { android.nfc.tech.NdefFormatable.class.getName() }
             };
     NfcAdapter nfcAdpt = NfcAdapter.getDefaultAdapter(this);
            nfcAdpt.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techList);
     }
     catch(NFCManager.NFCNotSupported nfcnsup) {
        Snackbar.make(v, "NFC not supported", Snackbar.LENGTH_LONG).show();
     }
     catch(NFCManager.NFCNotEnabled nfcnEn) {
        Snackbar.make(v, "NFC Not enabled", Snackbar.LENGTH_LONG).show();
     }
}

如何在Android中编写NFC标签

现在,Android应用程序已准备就绪,可以处理NFC标签,并且当Android智能手机靠近NFC标签时,会将事件通知给该应用程序。 下一步是将数据写入标签。 方法很简单:

public void writeTag(Tag tag, NdefMessage message)  {
  if (tag != null) {
     try {
        Ndef ndefTag = Ndef.get(tag);
        if (ndefTag == null) {
           // Let's try to format the Tag in NDEF
           NdefFormatable nForm = NdefFormatable.get(tag);
           if (nForm != null) {
              nForm.connect();
              nForm.format(message);
              nForm.close();
            }
        }
        else {
           ndefTag.connect();
           ndefTag.writeNdefMessage(message);
           ndefTag.close();
        }
     }
     catch(Exception e) {
         e.printStackTrace();
     }
  }
}

此方法接受我们要编写的NFC标签和包含要编写的消息的NdefMessage的抽象表示。 第一步,NFCManager类尝试获取Ndef标签(第4行)。 如果标签为空,则应用程序尝试“格式化”标签并编写消息。 如果标签已经格式化,则Android应用会尝试连接到标签抽象表示并编写NdefMessage。

使用Android应用将URL写入NFC标签

现在知道如何将数据写入NFC标签,是时候开始编写一些简单的信息了。

作为第一个示例,Android NFC应用程序编写一个URL:

public NdefMessage createUriMessage(String content, String type) {
     NdefRecord record = NdefRecord.createUri(type + content);
     NdefMessage msg = new NdefMessage(new NdefRecord[]{record});
     return msg;
}

该代码非常简单,使用Android NFC Api提供的NdefRecord ,Android应用程序会创建Uri记录。 众所周知, NdefMessage是一个记录数组,因此我们创建了一个NFC Ndef Message,它仅包含一个记录:Uri记录。
type保留http值,因为它是一个链接。

如果我们要编写一个包含电话号码NFC标签,以便当用户用智能手机点击该标签时会触发电话呼叫,则必须以tel:类型传递。

android_nfc_writer android_nfc_writer_url_snackbar

将文本数据写入NFC标签

最后一个示例是在NFC标签中写入文本数据。 在这种情况下,遵循NFC规范,代码非常简单:

public NdefMessage createTextMessage(String content) {
  try {
     // Get UTF-8 byte
     byte[] lang = Locale.getDefault().getLanguage().getBytes("UTF-8");
     byte[] text = content.getBytes("UTF-8"); // Content in UTF-8

     int langSize = lang.length;
     int textLength = text.length;

     ByteArrayOutputStream payload = new ByteArrayOutputStream(1 + langSize + textLength);
     payload.write((byte) (langSize & 0x1F));
     payload.write(lang, 0, langSize);
     payload.write(text, 0, textLength);
     NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, 
                             NdefRecord.RTD_TEXT, new byte[0], 
                             payload.toByteArray());
     return new NdefMessage(new NdefRecord[]{record});
  }
  catch (Exception e) {
     e.printStackTrace();
  }
 
  return null;
}

为NFC应用实现Android UI

最后一步是实现UI,以便Android应用处理不同的NFC记录类型,并且用户可以插入要写入的数据。 该应用程序使用一个保存不同记录类型的微调器和一个保存要写入的数据的EditText,最后使用一个按钮(一个Floating Action Button)来开始操作。 用户单击按钮后,应用程序即开始等待NFC标签。 当用户点击标签时,应用程序将开始写入数据。

翻译自: https://www.javacodegeeks.com/2016/01/write-nfc-tag-android.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android设备上,可以通过触碰NFC标签来打开应用程序。NFC(Near Field Communication,近场通信)是一种无线通信技术,它允许在非接触范围内进行短距离通信。Android设备通常具有内置的NFC芯片,用于支持此功能。 要实现通过触碰NFC标签打开应用程序,首先需要编写一个基于NFC的触发器,也称为Intent过滤器。在AndroidManifest.xml文件,可以声明该Intent过滤器,以便在设备接收到与标签相关的NFC消息时,启动您的应用程序。 接下来,您需要为应用程序的相应活动(Activity)添加一个Intent接收器。这样,当设备接收到与标签相关的NFC消息时,您的应用程序将被启动,并且设备上正在前台运行的活动将接收该消息。 在接收到NFC触摸事件后,您可以使用Intent对象的信息来执行相应的操作。您可以从Intent对象获取标签ID或其他信息,并针对这些数据执行合适的逻辑。例如,您可以根据标签ID从数据库检索数据,并显示在应用程序。 需要注意的是,为了让设备正确处理NFC操作,您需要确保设备开启了NFC功能,并且在应用程序的清单文件正确配置了相关权限和过滤器。 通过使用NFC技术,您可以使Android设备能够通过触碰标签来启动应用程序。这种功能广泛应用于许多领域,如门禁系统、支付系统和数据传输等。同时,它也带来了更多创新和便利的可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值