문자로 오는 인증번호를 추출하는 브로드케스트 리시버(BroadcastReceiver) 를 해보겠습니다.
우선 BroadcastReceiver 클래스를 만들어볼게요.
클래스 이름은 SMSReceiver로 지었습니다!
그리고 메니페스트에서 퍼미션 추가해줄게요.!
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
원래는 RECEIVE_SMS만 있어도 되는데 저는 나중에 뭐 또 쓸 일 있을거같아서 3개 다 넣었습니다..
그리고 메니페스트에서 리시버를 등록해줘야 합니다.
<receiver
android:name=".SMSReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
이렇게 액션도 추가하여 달아줬습니다.
class SMSReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if(intent?.action.equals("android.provider.Telephony.SMS_RECEIVED")){
}
}
}
이렇게 onReceive에서 if 조건문을 걸어주겠습니다.
만약 onReceive가 없는 분들은
윈도우는 ctrl + O 맥은 command + O 누르시면 현재 커서가 잡힌 블럭 안에서 오버라이드 가능한 리스트가 나옵니다.
if조건문에서 android.provider.Telephony.SMS_RECEIVED는 문자가 왔을때 발생되는 intent action 입니다.
문자가 왔을때만 동작 하겠다는겁니다..!!
그리고 onReceive 밖에 함수를 하나 만들어주겠습니다.
fun smsMessageParse(bundle: Bundle): Array<SmsMessage?>? {
val objs = bundle["pdus"] as Array<Any>?
val messages: Array<SmsMessage?> = arrayOfNulls<SmsMessage>(objs!!.size)
for (i in objs!!.indices) {
messages[i] = SmsMessage.createFromPdu(objs[i] as ByteArray)
}
return messages
}
문자 내용을 파싱해오는 함수입니다!
그럼 onReceive로 돌아오셔서 이어서 작성해줄게요.
override fun onReceive(context: Context?, intent: Intent?) {
if(intent?.action.equals("android.provider.Telephony.SMS_RECEIVED")){
val bundle = intent?.extras
val messages = smsMessageParse(bundle!!)
}
}
intent로부터 내용을 받아온 후에 방금 작성하신 함수를 호출하여 내용을 파싱해줍니다.
override fun onReceive(context: Context?, intent: Intent?) {
if(intent?.action.equals("android.provider.Telephony.SMS_RECEIVED")){
val bundle = intent?.extras
val messages = smsMessageParse(bundle!!)
if(messages?.size!! > 0){
val content = messages[0]?.messageBody.toString()
val certNumber = content?.replace("[^0-9]".toRegex(),"")
Log.d("인증번호 추출 ",certNumber)
}
}
}
그리고 나서 메세지가 있는 경우 메세지 내용을 String으로 변환해서 가져오시고나서
그 메세지에서 패턴을 이용하여 숫자만 추출하여 가져옵니다!
그럼 로그에 인증번호가 딱 찍히는데요!
저는 이 값을 글로벌 클래스에있는 변수에 저장해서 사용했답니다.
이상이에요!
'Android' 카테고리의 다른 글
코틀린 안드로이드 핸드폰번호 국가코드로 변환시키기 (0) | 2022.02.04 |
---|---|
코틀린 안드로이드 핸드폰번호 패턴체크 (0) | 2022.02.03 |
안드로이드 코틀린(Kotlin) 멀티파트(Multipart)를 이용하여 웹으로 사진 전송 (0) | 2022.01.17 |
Android Kotiln(코틀린) 네이버 아이디 로그인하기 ( 안드로이드 12 이슈 대응 포함) (0) | 2022.01.03 |
안드로이드 Notification 클릭 시 원하는 곳으로 이동 중복실행 방지 및 포그라운드 중 바로이동 안드로이드12 이슈대응까지 (0) | 2021.12.08 |
댓글