본문 바로가기
IT/Android

Android] 문자 SMS 읽어오기

by 깻잎쌈 2023. 1. 20.
반응형

https://ju-hy.tistory.com/50

 

Broadcast Receiver를 이용한 SMS 수신

Broadcast Receiver(방송수신자)란? 안드로이드 시스템에서는 전화가 오거나 문자메시지가 오는 등 특정 상황에서 방송을 내보낸다. 이런 시스템에서 방송을 해주는 이벤트들을 Global Event라고 하며,

ju-hy.tistory.com

 

권한 추가

<uses-permission android:name="android.permission.RECEIVE_SMS" />

 

SMS_RECEIVED BroadcastReceiver 등록

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(smsReceiver, intentFilter);
        
        .
        .
        .
        
private SmsMessage[] parseSmsMessage(Bundle bundle){
    Object[] objs = (Object[]) bundle.get("pdus");
    SmsMessage[] messages = new SmsMessage[objs.length];

    for(int i=0; i<objs.length; i++) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            String format = bundle.getString("format");
            messages[i] = SmsMessage.createFromPdu((byte[]) objs[i], format);
        } else {
            messages[i] = SmsMessage.createFromPdu((byte[]) objs[i]);
        }
    }

    return messages;
}

private BroadcastReceiver smsReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
            Bundle bundle = intent.getExtras();
            SmsMessage[] messages = parseSmsMessage(bundle);

            if (messages.length > 0) {
                String contents = messages[0].getMessageBody().toString();
                //
                Log.d(TAG, contents);
            }
        }
    }
};

 

반응형

댓글