반응형
앱내에서 NFC를 이용하여 교통카드 기능이 사용 가능하도록 합니다.
삼상페이나 다양한 회사의 교통카드 종류가 많으니깐, 앱 실행시 타사의 교통카드가 활성화가 되어있다면
저희측 교통카드를 활성화를 할수있도록 체크하여 팝업으로 유도합니다.
위 사진과 같은 상태일때
private fun nfcBaeCheckToChanged(){
val emulation = CardEmulation.getInstance(NfcAdapter.getDefaultAdapter(context))
val paymentServiceComponent = ComponentName(requireContext(), NFCService::class.java.canonicalName?:"")
//현재 비접촉결제 체크
if(emulation.isDefaultServiceForCategory(paymentServiceComponent, CardEmulation.CATEGORY_PAYMENT)){
batteryCheck()
} else { //기본설정이 아닐때
Intent(CardEmulation.ACTION_CHANGE_DEFAULT).apply {
putExtra(CardEmulation.EXTRA_CATEGORY, CardEmulation.CATEGORY_PAYMENT)
putExtra(CardEmulation.EXTRA_SERVICE_COMPONENT, paymentServiceComponent)
nfcCheckLauncher.launch(this)
}
}
}
위의 코드가 설명과 같은 코드입니다. 실행하여 저희측 앱이 아니라면 아래와 같은 이미지의 팝업이 노출됩니다.
이렇게 해서 NFC 접촉결제에 대한 처리를 진행 후 여러방면으로 실사용 테스트를 진행하였고,
몇몇 상황에서 NFC관련이 작동하지 않는 상황이 발생하였고, 체크 결과 배터리관련 즉 도즈모드
관련 이슈가 있는것으로 판단이 되어 배터리 사용에 대한 옵션을 또 변경해주는것으로 작업을 진행하였습니다.
애플리케이션 정보 > 배터리 > 제한 or 최적화 상태일때
즉 위와 같은 상태일때 제한 없음으로 변경하여 백그라운드 통신에 제한이 없도록 해야합니다.
왜냐하면 교통카드는 앱을 켜서 실행하는게 아니기때문에, 애석하지만 다른 교통카드와는 다르게 디바이스가
완전 꺼진상태에서는 사용할수 없는....구글쪽 정책으로 예전에 바뀐...
어쩃든 코드는 아래와 같습니다.
private fun batteryCheck() {
val pm = requireContext().getSystemService(Context.POWER_SERVICE) as PowerManager
if (pm.isIgnoringBatteryOptimizations(requireContext().packageName)) {
passDone()
} else { //배터리 사용량 최적화 상태일때
Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
data = Uri.parse("package:${requireContext().packageName}")
batteryCheckLauncher.launch(this)
}
}
}
위 코드가 실행되면 아래와 같은 팝업이 보여집니다.
반응형
'프로그램 > Android' 카테고리의 다른 글
안드로이드 scrollview 안에 있는 webview 줌인아웃 처리 (1) | 2024.11.27 |
---|---|
컴포즈 커스텀 캘린더 만들기 (0) | 2024.11.25 |
코루틴을 이용한 비동기 처리방법 (0) | 2024.11.06 |
구글스토어 다국어 스토어설정 (1) | 2024.10.07 |
캠월드 개발일지 2(디자인가이드 적용) (0) | 2024.09.24 |