반응형
Notice
Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- BottomSheetDialog
- firebase-storage
- AWS
- socket.io
- git-push
- NoSuchMethodError
- Flavors
- JNI
- google-login
- 워치
- ActivityResult-API
- Kotlin
- socket-server
- ozd
- OZViewer
- socket-client
- hung-up
- Java8
- Android
- mqtt
- git
- TIZEN
- Dva
- 오즈뷰어
- mosquitto
- cloud-firestore
- Galaxy Watch
- Firebase
- firebase-database
- gradle
Archives
- Today
- Total
Hyeyeon blog
[Android] NFC on, off 상태 확인 (기본모드, 카드모드, 비활성화) 본문
반응형
1. NFCAdapter를 사용한 NFC 활성화, 비활성화 상태 확인
기본적인 NFC의 on, off 상태 확인은 아래와 같이 가능하다.
import android.nfc.NfcAdapter;
val nfcAdapter : NfcAdapter = NfcAdapter.getDefaultAdapter(context)
val isNfcOn : Boolean = nfcAdapter.isEnabled()
그러나 NFC가 on이어도 일반모드 일때만 true를 반환하고 카드모드 일때는 NFC off와 동일하게 false를 반환한다.
Android에서 NFC의 모드를 구분할 수 있는 메소드가 제공되지 않기 때문에, BroadcastReceiver를 사용하여 상태 값으로 구분이 가능하다.
2. BroadcastReceiver를 사용한 NFC 상태 확인
NFC의 상태가 변할 때 리시버가 호출되어 state 값을 확인할 수 있다.
활성화, 비활성화에 따른 상태 값의 변화는 아래와 같다.
1. 비활성화 -> 기본모드 활성화: STATE_TURNING_ON -> STATE_ON
2. 기본모드 -> 카드모드 활성화: null 혹은 5
3. 카드모드 활성화 -> 비활성화: STATE_TURNING_OFF -> STATE_OFF
val receiver = object : BroadcastReceiver() {
override fun onReceive(con: Context?, intent: Intent) {
val action = intent.action
if (action == NfcAdapter.ACTION_ADAPTER_STATE_CHANGED) {
val state = intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_OFF)
when (state) {
NfcAdapter.STATE_OFF -> { /* NFC 비활성화 */ }
NfcAdapter.STATE_TURNING_OFF -> { /* NFC 비활성화 전환 */ }
NfcAdapter.STATE_ON -> { /* NFC 일반모드 활성화 */ }
NfcAdapter.STATE_TURNING_ON -> { /* NFC 활성화 전환 */ }
else -> { /* NFC 카드모드 활성화 등 */ }
}
}
}
}
3. BroadcastReceiver 등록, 해지
위와 같이 생성한 리시버를 아래와 같이 onResume() 혹은 onStart()에서 등록하여 사용한다.
context.registerReceiver(receiver, IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED))
해지 시에는 onPause() 혹은 onStop()에서 아래와 같이 호출한다.
* onDestoy()는 호출된다는 보장이 없어서 onDestroy()에서 호출할 경우에 메모리 누수가 발생할 수 있다.
context.unregisterReceiver(receiver)
728x90
'개발 > Android' 카테고리의 다른 글
[Android] Github Actions으로 Android CI 구현하기 (0) | 2023.01.04 |
---|---|
[Android] DataBinding으로 RecyclerView 만들기 (리스트 높이 제한 방법) (0) | 2022.12.31 |
[Android] 갤러리에서 사진 가져오기 - ActivityResultLauncher, Intent (0) | 2022.03.02 |
[Android] Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8 해결 방법 (0) | 2021.12.07 |
[Android] Progress Dialog 만들기 (2) | 2021.08.25 |
Comments