android 实现nfc刷卡 并显示识别后的卡号
时间: 2024-03-21 19:37:48 浏览: 23
好,我可以为您介绍一下实现这个功能的一般步骤:
1. 在 AndroidManifest.xml 文件中添加 NFC 相关的权限和 intent-filter,以便应用程序能够接收 NFC 相关的广播信息。
2. 创建一个 Activity,并在 onCreate 方法中获取 NFC 适配器,并设置一个 PendingIntent,以便在有 NFC 卡片靠近时,能够接收到相应的广播消息。
3. 在 onNewIntent 方法中处理接收到的 NFC 广播消息,获取卡片的 ID,并显示在界面上。
下面是一个简单的实现示例:
```java
public class MainActivity extends AppCompatActivity {
private NfcAdapter mAdapter;
private PendingIntent mPendingIntent;
private TextView mCardIdTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取 NFC 适配器
mAdapter = NfcAdapter.getDefaultAdapter(this);
// 设置 PendingIntent,以便在有 NFC 卡片靠近时,能够接收到相应的广播消息
Intent intent = new Intent(this, getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mPendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
// 获取界面上的 TextView
mCardIdTextView = findViewById(R.id.card_id_text_view);
}
@Override
protected void onResume() {
super.onResume();
// 启动前台调度系统,以便在有 NFC 卡片靠近时,能够接收到相应的广播消息
if (mAdapter != null) {
mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
}
}
@Override
protected void onPause() {
super.onPause();
// 停止前台调度系统,以便在应用程序不在前台运行时,不再接收到 NFC 相关的广播消息
if (mAdapter != null) {
mAdapter.disableForegroundDispatch(this);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 处理接收到的 NFC 广播消息
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] id = tag.getId();
// 将卡片的 ID 转换为十六进制字符串,并显示在界面上
String cardId = bytesToHexString(id);
mCardIdTextView.setText(cardId);
}
}
private String bytesToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X", b));
}
return sb.toString();
}
}
```
在这个示例中,我们通过获取 NFC 适配器并设置 PendingIntent,在有 NFC 卡片靠近时能够接收到相应的广播消息。在 onNewIntent 方法中,我们处理接收到的 NFC 广播消息,并获取卡片的 ID,将其转换为十六进制字符串,并显示在界面上。
当然,这只是一个简单的示例,实际应用中,您可能还需要考虑卡片类型的识别、卡片信息的解析等问题。