안드로이드에서 문자메세지 읽어오는 방법

조회수 7582회

회원가입할때 인증번호를 문자로 보내고 그걸 앱에서 인증번호만 자동으로 빼오게끔 하고싶은데요. 그러려면 sms를 받아와야하잖아요. sms의 내용을 어떻게 받아올수있을까요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    1. 우선 안드로이드 매니페스트에서 아래처럼 퍼미션을 줍니다.

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

    2. 그리고 SMS를 받는 리시버 클래스를 정의해줍니다.

    public class SMSReceiver extends BroadCastReceiver {
    
        // 지정한 특정 액션이 일어나면 수행되는 메서드 
        @Override
        public void onReceive(Context context, Intent intent) {
    
            // SMS를 받았을 경우에만 반응하도록 if문을 삽입
            if (intent.getAction().equals(
                "android.provider.Telephony.SMS_RECEIVED")) {
                StringBuilder sms = new StringBuilder();    // SMS문자를 저장할 곳
                Bundle bundle = intent.getExtras();         // Bundle객체에 문자를 받아온다
    
                if (bundle != null) {
                    // 번들에 포함된 문자 데이터를 객체 배열로 받아온다
                    Object[] pdusObj = bundle.get("pdus");
    
                    // SMS를 받아올 SmsMessage 배열을 만든다
                    SmsMessage[] messages = new SmsMessage[pdusObj.length];
                    for (int i = 0; i < pdusObj.length; i++) {
                        messages[i] =
                            SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                        // SmsMessage의 static메서드인 createFromPdu로 pdusObj의
                        // 데이터를 message에 담는다
                        // 이 때 pdusObj는 byte배열로 형변환을 해줘야 함
                    }
    
                    // SmsMessage배열에 담긴 데이터를 append메서드로 sms에 저장
                    for (SmsMessage smsMessage : messages) {
                        // getMessageBody메서드는 문자 본문을 받아오는 메서드
                        sms.append(smsMessage.getMessageBody());
                    }
    
                    sms.toString() // StringBuilder 객체 sms를 String으로 변환
                }   
            }
        }
    }
    

    3. 안드로이드 매니페스트파일에서 해당 리시버를 등록해줍니다.

        <receiver android:name=".SMSReceiver">
            <intent-filter >
                <!-- 문자를 받아올 수 있게 intent-filter 추가 -->
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>                
            </intent-filter>
        </receiver>
    

    이걸 잘 응용하시면 됩니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)