Android 12 NFC刷卡案例

概述

本案例展示了如何使用Android平台上的NFC技术来实现简单的数据分享功能。用户可以通过NFC碰触的方式将一条包含当前时间戳的消息从一台设备发送到另一台设备。

前提条件

  • 设备支持NFC功能。
  • Android SDK版本不低于2.3.3 (API level 9),因为NFC功能是从这个版本开始引入的。
  • 开发环境配置好Android Studio。

实现步骤

步骤 1: 初始化NFC适配器

onCreate()方法中初始化NFC适配器并检查设备是否支持NFC功能。如果不支持,则显示提示信息并关闭当前Activity。

private NfcAdapter nfcAdapter = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    if (nfcAdapter == null) {
        Toast.makeText(this, "该机型不支持NFC", Toast.LENGTH_LONG).show();
        finish();
    }
    // 设置NDEF消息回调
    nfcAdapter.setNdefPushMessageCallback(this, this);
}

步骤 2: 处理新的Intent

当有新的NFC事件发生时,系统会调用onNewIntent()方法。在这里我们处理接收到的Intent,并从中提取NFC标签的信息。

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    processIntent(intent);
}

private void processIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    if (extras == null) return;
    Tag tag = extras.getParcelable("android.nfc.extra.TAG");
    if (tag != null) {
        byte[] id = tag.getId();
        String cardNo = bytearray2Str(id, 0, 5, 8); // 根据需要调整参数
        Toast.makeText(this, "获取卡数据:" + cardNo, Toast.LENGTH_LONG).show();
    }
}

public static String bytearray2Str(byte[] data, int start, int length, int targetLength) {
    long number = 0;
    for (int i = 1; i <= length; i++) {
        number *= 65536; // 16进制基数
        number += (data[start + length - i] & ½xFF);
    }
    return String.format("%0" + targetLength + "X", number);
}

步骤 3: 创建NDEF消息

实现createNdefMessage(NfcEvent event)方法以创建一条NDEF消息。这条消息包含了要通过NFC传输的数据。

@Override
public NdefMessage createNdefMessage(NfcEvent event) {
    String text = "Beam me up, Android!\n\n" + "Beam Time: " + System.currentTimeMillis();
    return new NdefMessage(new NdefRecord[]{
            createMime("application/vnd.com.example.android.beam", text.getBytes())
    });
}

private NdefRecord createMime(String mimeType, byte[] payload) {
    byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));
    NdefRecord mimeRecord = new NdefRecord(
            NdefRecord.TNF_MIME_MEDIA,
            mimeBytes,
            new byte[0],
            payload);
    return mimeRecord;
}

测试

确保两台设备都已开启NFC并且安装了您的应用程序。打开应用程序后,将两台设备的NFC区域轻轻接触,即可看到数据被成功传输。

注意事项

  • 在AndroidManifest.xml文件中添加NFC相关的权限。
  • 确保设备的NFC设置允许数据传输。
  • 测试时确保设备之间没有物理障碍物。

请根据您的实际需求调整代码中的细节。这份文档提供了基本的指导,您可能还需要查阅Android官方文档来获得更详细的说明和支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值