Android NFC通信示例

前言

近距离无线通信 (NFC) 是一组近距离无线技术,通常只有在距离不超过 4 厘米时才能启动连接。借助 NFC,您可以在 NFC 标签与 Android 设备之间或者两台 Android 设备之间共享小型负载。

支持 NFC 的 Android 设备同时支持以下三种主要操作模式:

  1. 读取器/写入器模式:支持 NFC 设备读取和/或写入被动 NFC 标签和贴纸。
  2. 点对点模式:支持 NFC 设备与其他 NFC 对等设备交换数据;Android Beam 使用的就是此操作模式。
  3. 卡模拟模式:支持 NFC 设备本身充当 NFC 卡。然后,可以通过外部 NFC 读取器(例如 NFC 销售终端)访问模拟 NFC 卡。

示例

下面是一个简单的 Android NFC 通信示例,它演示了如何使用 NFC 技术在两个 Android 设备之间进行通信。

在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.NFC" />

在您的 Activity 中,您需要创建一个 NfcAdapter 对象,并注册一个 NDEF 消息接收器来处理接收到的 NDEF 消息。以下是一个示例:

public class MainActivity extends AppCompatActivity {
    private NfcAdapter nfcAdapter;
    private PendingIntent pendingIntent;
    private IntentFilter[] intentFiltersArray;
    private String[][] techListsArray;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取 NfcAdapter 对象
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);

        // 创建一个 PendingIntent 对象,用于处理 NFC Intent
        Intent intent = new Intent(this, getClass());
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        // 创建一个 IntentFilter 对象,用于过滤 NFC Intent
        IntentFilter intentFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            intentFilter.addDataType("application/vnd.com.example.android.beam");
        } catch (IntentFilter.MalformedMimeTypeException e) {
            e.printStackTrace();
        }
        intentFiltersArray = new IntentFilter[] { intentFilter };

        // 创建一个 TechList 数组,用于指定 NFC 技术列表
        techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 在 onResume() 方法中启用 NFC 功能,注册 NDEF 消息接收器
        if (nfcAdapter != null) {
            nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
        }
    }

    @Override
    protected void onPause() {
        // 在 onPause() 方法中禁用 NFC 功能,注销 NDEF 消息接收器
        super.onPause();
        if (nfcAdapter != null) {
            nfcAdapter.disableForegroundDispatch(this);
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        // 处理接收到的 NDEF 消息
        String action = intent.getAction();
        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
            Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
            if (rawMsgs != null) {
                NdefMessage[] msgs = new NdefMessage[rawMsgs.length];
                for (int i = 0; i < rawMsgs.length; i++) {
                    msgs[i] = (NdefMessage) rawMsgs[i];
                }
                // 处理接收到的 NDEF 消息
                // ...
            }
        }
    }
}

在上述代码中,我们创建了一个 NfcAdapter 对象,使用 enableForegroundDispatch() 方法启用 NFC 功能,并在 onResume() 方法中注册了一个 NDEF 消息接收器。在 onPause() 方法中禁用 NFC 功能,并在 onNewIntent() 方法中处理接收到的 NDEF 消息。

此示例使用 NfcF 技术来进行 NFC 通信。如果您需要使用其他 NFC 技术进行通信,您需要修改 techListsArray 数组中的技术列表。同时,您还需要修改 IntentFilter 中的数据类型,以适应您的应用程序需求。

请注意,此示例仅演示了如何使用 NFC 技术在两个 Android 设备之间进行通信。在实际应用中,您可能需要更复杂的通信协议和数据格式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

無昂博奥

测试下大赏功能,请勿大赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值