Notice
Recent Posts
Recent Comments
Link
투케이2K
940. (Android/Java) [간단 소스] 안드로이드 onNewIntent 에서 NFC 카드 태깅 TAG , NDEF 메시지 확인 코드 본문
Android
940. (Android/Java) [간단 소스] 안드로이드 onNewIntent 에서 NFC 카드 태깅 TAG , NDEF 메시지 확인 코드
투케이2K 2025. 1. 16. 20:05[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin
[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 기술 구분 : Nfc / Card / Tag / Ndef / Tech
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[사전) 필요 설정]
// --------------------------------------------------------------------------------------
/**
* // -------------------------------------------------------
* 1. 필요 퍼미션 :
*
* <uses-permission android:name="android.permission.NFC"/>
* <uses-feature android:name="android.hardware.nfc" android:required="true" />
* // -------------------------------------------------------
* 2. 참고 사이트 :
*
* UID 및 NDEF 메시지 읽기, 쓰기 : https://blog.naver.com/kkh0977/223128033201?trackingCode=blog_bloghome_searchlist
*
* 마이페어 카드 섹터 블럭 읽기 : https://blog.naver.com/kkh0977/223015747045
*
* 안드로이드 어댑터 클래스 : https://developer.android.com/reference/android/nfc/NfcAdapter
* // -------------------------------------------------------
* */
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
@Override
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
if (intent != null){
// -------------------------------------------------
// TODO [NFC 태그 ID 데이터 읽기]
// -------------------------------------------------
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] tagId = null;
if (tag != null){
tagId = tag.getId();
}
// -------------------------------------------------
// -------------------------------------------------
// TODO [NDEF 메시지 읽기]
// -------------------------------------------------
Parcelable[] rawMessage = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
String payloadStr = "";
if (rawMessage != null){
NdefMessage[] messages = new NdefMessage[rawMessage.length];
for (int i=0; i<messages.length; i++){
messages[i] = (NdefMessage) rawMessage[i];
}
for (int i=0; i<messages.length; i++){
try {
NdefRecord[] records = messages[i].getRecords();
for(NdefRecord rec : records) {
byte[] payload = rec.getPayload();
String textEncoding = "UTF-8";
if (payload.length > 0) {
textEncoding = (payload[0] & 0200) == 0 ? "UTF-8" : "UTF-16";
}
// TODO [Get the Language Code]
int languageCodeLength = payload[0] & 0077;
String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
// TODO [Get the Text]
payloadStr = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
}
}
catch (Exception e){}
}
}
// -------------------------------------------------
// -------------------------------------------------
// TODO [JSON 데이터 포맷]
// -------------------------------------------------
try {
JSONObject jsonObject = new JSONObject();
// ---------------------------------------------
if (tagId != null && tagId.length > 0){ // TODO [태그 ID]
String hexTagId = C_Encryption.byteToHex(tagId);
hexTagId = hexTagId.replaceAll("0x", "");
hexTagId = hexTagId.replaceAll("0X", "");
hexTagId = hexTagId.replaceAll(" ", "");
jsonObject.put(NFC_HEX_TAG_ID, hexTagId);
}
else {
jsonObject.put(NFC_HEX_TAG_ID, "");
}
// ---------------------------------------------
if (C_Util.stringNotNull(payloadStr) == true){ // TODO [NDEF 메시지]
jsonObject.put(NFC_STRING_NDEF_MSG, payloadStr);
}
else {
jsonObject.put(NFC_STRING_NDEF_MSG, "");
}
// ---------------------------------------------
S_Log._D_(ACTIVITY_NAME + " : NFC Read Data >>>>>>>>>>>", new String[]{ jsonObject.toString() });
// ---------------------------------------------
}
catch (Exception et){
et.printStackTrace();
}
}
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
UID 및 NDEF 메시지 읽기, 쓰기 : https://blog.naver.com/kkh0977/223128033201?trackingCode=blog_bloghome_searchlist
마이페어 카드 섹터 블럭 읽기 : https://blog.naver.com/kkh0977/223015747045
안드로이드 어댑터 클래스 : https://developer.android.com/reference/android/nfc/NfcAdapter
NFC 기능 활성 및 카드 Read , Write 관련 모듈 : https://blog.naver.com/kkh0977/223607573751?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
반응형
'Android' 카테고리의 다른 글
Comments