nfc读卡java开发,Android实现读取NFC卡卡号示例
时间: 2023-12-27 07:12:46 浏览: 30
好的,我可以为您提供一些参考代码。首先,您需要在 AndroidManifest.xml 文件中声明您的应用程序将使用 NFC 权限:
```xml
<uses-permission android:name="android.permission.NFC" />
```
然后,在您的活动中,您需要实现一个 NFC 适配器,并在 onResume() 方法中启用它,以便您的应用程序可以接收 NFC 意图:
```java
public class MainActivity extends AppCompatActivity {
private NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
}
@Override
protected void onResume() {
super.onResume();
if (nfcAdapter != null) {
IntentFilter[] filters = new IntentFilter[]{
new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED),
new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED),
new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED)
};
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
nfcAdapter.enableForegroundDispatch(this, pendingIntent, filters, null);
}
}
@Override
protected void onPause() {
super.onPause();
if (nfcAdapter != null) {
nfcAdapter.disableForegroundDispatch(this);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent != null && NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
byte[] id = tag.getId();
String cardNumber = bytesToHexString(id);
// 在这里处理卡号
}
}
}
private String bytesToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X", b));
}
return sb.toString();
}
}
```
在这个示例中,我们使用了 enableForegroundDispatch() 方法来启用前台调度,这将使您的应用程序在 NFC 读卡器接收到标签时立即接收到 NFC 意图。在 onNewIntent() 方法中,我们从意图中获取标签并将其 ID 转换为十六进制字符串,这就是您需要的卡号。
请注意,此示例仅适用于读取非 NDEF 格式化的标签。如果您需要读取 NDEF 格式化的标签,您需要使用 ACTION_NDEF_DISCOVERED 意图过滤器,并使用 getNdefMessage() 方法从 Tag 对象中获取 NDEF 消息。