NFC
- 가까운 거리에서 동작하는 근거리 무선 통신 기술
- RFID의 기술을 확장한 것
- RFID : 태그에 있는 데이터만 읽기 가능 - 최대 848Kpbs의 Data 전송 가능
- 양방향 실시간 데이터 통신이 가능
- 블루투스 보다 전송속도는 느리나, 통신설정 시간이 짧아 인식과 반응속도 빠름
NFC 운용모드
태그 읽기/쓰기 - 태그의 데이터를 읽기와 쓰기 가능
P2P 통신 - 디바이스끼리 P2P 데이터 통신 가능
HCE 모드 (Host Card Emulation) - Tag Emulation Mode
NFC Tag Dispatch System 우선순위
- ACTION_NDEF_DISCOVERED
- NDEF 페이로드가 포함된 태그 또는 태그의 유형이 인식될 경우
- 우선 순위가 가장 높음 - ACTION_TECH_DISCOVERED
- MIME 유형 또는 URI 매핑을 할 수 없는 NDEF 데이터가 포함된 경우
- 태그에 NDEF 데이터가 포함되어 있지 않은 경우 - ACTION_TAG_DISCOVERED
- 위 2가지 인텐트에 필터링이 안 된 경우에 사용
NDEF
- NFC Forum Data Exchange Format의 약자, NFC Tag에 NFC data를 저장하기 위한 컨테이너 포맷
- 정의된 여러 타입이 있음(Record) : URI, TextRecord, AAR(Android Application Record)
- NdefMessage는 여러 개의 NdefRecord로 구성됨
- NFC Tag를 구성하는 Data는 그 유형에 따라 구분되며, 가장 많이 사용되는 유형은 일반 텍스트와 URI
NdefRecord 구성
- Payload type : record format 설명 :: T:Text, U:Uri, SP:Smart Poster
- Payload Identifier : record의 고유한 식별자
- Payload length : payload의 크기
- Payload : application에서 사용하는 Data
TNF(Typed Named Format)
- EMPTY (0x00000000)
- WELL_KNOWN (0x00000001)
- MIME_MEDIA (0x00000002)
- ABSOLUTE_URI (0x00000003)
- EXTERNAL_TYPE (0x00000004)
- UNKNOWN (0x00000005)
NFC API
NFCManager
- NFCAdapter를 얻을 때 사용하는 class
NFCAdapter
- NFC 하드웨어에 접근하는 기능을 제공하는 class
- getDefaultAdapter() 함수를 통해 얻어옴
- 제공 주요함수 (getDefaultAdapter() : NFCAdapter를 얻을 때 사용)
주요함수
enableForegroundDispatch() / disableForegroundDispatch()
: 포그라운드 기능 활성화, 비활성화
ex) nAdapter!!.enableForegroundDispatch(this, pIntent, filters, null)
filters = Manifest에 설정하는 값
null = tech list
setNdefPushMessage / setNdefPushMessageCallback()
: Android Beam에서 NDEF Message 전송시 사용
setBeamPushUris() / setBeamPushUrisCallback() -> P2P 통신 (Android Beam)
: Android Beam 에서 NFC와 Bluetooth를 활용해 데이터 전송시 사용
NdefMessage
- NFC 포럼에서 정의한 Data 형식을 만드는 class
- Intent에서 getParcelableArrayExtra() 함수 이용해 raw Data를 얻어낸다.
ex) val rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)
NdefRecord
- NdefMessage를 구성하는 단위 calss로 N 개의 NdefRecord로 구성
- getPayload() : NdefRecord에 포함된 앱 Data 정보를 얻을 때 사용
- 각각의 Data Type에 해당하는 NdefRecord를 생성할 때 사용
:: createUri(), createMime(), createApplicationRecord()
Ndef
- Tag 관련 기본정보(Tag type, size)나 tag를 읽고 쓰는 기능을 제공
- 주요함수
.connect() : 태그와 태그 정보를 write할 기기간 연결 설정
.writeNdefMessage() : Tag에 NdefMessage를 write 함
.getMaxSize() : Tag에 write할 수 있는 최대 NdefMessage 크기 (단위 byte)
.makeReadOnly() : Tag를 읽기 전용 모드로 변경
.canMakeReadOnly() : makeReadOnly() 함수를 이용해 읽기 전용 태그로 변경이 가능한지 여부를 알렺무
.isWriteble() : Tag가 쓰기가 가능한지 여부를 알려줌
Tag
- Tag가 지원하는 기술 포맷을 정의하는 클래스
- 주요함수
.getTechList() : Tag가 지원하는 사용 가능한 기술셋 정보 조회
.getId() : Tag의 ID 정보 조회
Intent로 부터 정보 획득
- 필요한 정보를 가져오기 위한 action 이름
.EXTRA_TAG : 스캔된 Tag 객체의 정보 조회시
.EXTRA_NDEF_MESSAGE : Tag에 저장된 NDEF Message 조회시
.EXTRA_ID : Tag ID
'안드로이드 > 정리' 카테고리의 다른 글
[ Kotlin ] Coroutines을 확실하게 (0) | 2022.01.27 |
---|---|
[Android] Android Beam에 관해... (0) | 2021.11.03 |
[Android] 프로젝트 템플릿에 관해... (0) | 2021.11.01 |
[Android] Room에 관해... (0) | 2021.10.30 |
[Android] LiveData에 관해... (0) | 2021.10.29 |