完整代码实现模拟卡中的门禁卡信息写入手机的NFC芯片中。
时间: 2024-02-11 19:06:51 浏览: 156
门禁卡写入NFC手环手机教程
以下是一个简单的示例代码,演示了如何实现将IC卡门禁卡的信息保存到手机NFC中:
```java
public class MyHostApduService extends HostApduService {
//门禁卡信息
private byte[] accessCardData = null;
//APDU指令
private static final byte[] SELECT_AID = { (byte)0x00, (byte)0xA4, (byte)0x04, (byte)0x00, (byte)0x07, (byte)0xF0, (byte)0x39, (byte)0x41, (byte)0x48, (byte)0x48, (byte)0x30, (byte)0x31, (byte)0x00 };
private static final byte[] READ_BINARY = { (byte)0x00, (byte)0xB0, (byte)0x00, (byte)0x00, (byte)0x00 };
private static final byte[] UPDATE_BINARY = { (byte)0x00, (byte)0xD6, (byte)0x00, (byte)0x00, (byte)0x00 };
//模拟卡AID
private static final byte[] AID = { (byte)0xF0, (byte)0x39, (byte)0x41, (byte)0x48, (byte)0x48, (byte)0x30, (byte)0x31 };
@Override
public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
if (Arrays.equals(SELECT_AID, commandApdu)) {
return new byte[] { (byte)0x90, (byte)0x00 }; //返回成功
} else if (Arrays.equals(READ_BINARY, commandApdu)) {
return accessCardData; //返回门禁卡信息
} else {
return new byte[] { (byte)0x6A, (byte)0x81 }; //返回无效指令
}
}
@Override
public void onDeactivated(int reason) {
accessCardData = null; //释放门禁卡信息
}
//保存门禁卡信息到模拟卡中
public void saveAccessCardData(byte[] data) {
accessCardData = data;
}
//写入模拟卡中的门禁卡信息到手机NFC芯片中
public void writeAccessCardDataToNFC() {
NdefMessage message = new NdefMessage(new NdefRecord[] { NdefRecord.createMime("application/vnd.example.android.beam", accessCardData) });
Ndef ndef = Ndef.get(getIntent());
try {
ndef.connect();
ndef.writeNdefMessage(message);
ndef.close();
} catch (IOException | FormatException e) {
e.printStackTrace();
}
}
}
```
在调用此服务的应用程序中,可以调用saveAccessCardData方法将门禁卡信息保存到模拟卡中。然后,可以调用writeAccessCardDataToNFC方法将模拟卡中的门禁卡信息写入手机的NFC芯片中。
需要注意的是,此示例代码仅演示了将门禁卡信息保存到模拟卡中并写入手机的NFC芯片中的基本过程,实际应用中可能需要根据具体的门禁卡读卡器和IC卡门禁卡进行优化和调整。
阅读全文