You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Studio中如何通过NFC获取卡片ID?附代码求助

解决Android NFC卡片ID获取问题

嘿,我看你的代码其实已经离成功很近了!你已经拿到了NFC卡片的ID字节数组,但只是没把它转换成可读的格式而已,下面我一步步帮你搞定:

1. 修正现有代码,实现ID可读化

你代码里已经通过tag.getId()拿到了卡片ID的字节数组,但这个数组没法直接显示成人类可读的字符串。另外你重复获取了Tag对象(tag1),完全没必要,优化后加上ID转换逻辑:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.d(TAG, "onNewIntent");
    
    // 检查是否是NFC标签发现的动作
    if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
        TextView lata = findViewById(R.id.tv);
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        
        // 获取卡片ID字节数组
        byte[] id = tag.getId();
        // 转换成十六进制字符串(NFC卡片ID通常用十六进制表示)
        String cardId = bytesToHex(id);
        
        // 显示到TextView
        lata.setText("卡片ID: " + cardId);
        Log.d(TAG, "卡片ID: " + cardId);
    }
}

// 工具方法:将字节数组转换为十六进制字符串
private String bytesToHex(byte[] bytes) {
    StringBuilder sb = new StringBuilder();
    for (byte b : bytes) {
        sb.append(String.format("%02X", b));
    }
    return sb.toString();
}

2. 配置必要的权限与Intent过滤

要让App正常接收NFC事件,必须在AndroidManifest.xml里完成以下配置:

  • 添加NFC权限和硬件要求:
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
  • 给处理NFC的Activity添加Intent Filter:
<activity android:name=".YourNfcActivity">
    <intent-filter>
        <action android:name="android.nfc.action.TAG_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

3. 测试注意事项

  • 确保你的Android设备支持NFC,并且已经在系统设置里开启了NFC功能
  • 测试时把NFC卡片贴近设备的NFC感应区域(通常在手机背面顶部)

这样你就能在TextView里看到清晰的十六进制格式卡片ID啦!

内容的提问来源于stack exchange,提问作者Евгений Штин

火山引擎 最新活动