마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

문자메세지 가져오기 질문입니다. (롤리팝에서 안됨)

0 추천

안녕하세요 초보개발자입니다.

 

문자메세지를 가져와서 인증번호 자동입력되로록 구현했습니다.

 

그런데 롤리팝에서는 동작을 안하네요;;

 

아래는 소스입니다.

 

        // 문자 수신 리시버 등록.

        IntentFilter intentFilter = new IntentFilter();

        intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");

        getActivity().registerReceiver(smsReceiver, intentFilter);

 

private BroadcastReceiver smsReceiver = new BroadcastReceiver() {

 

        @Override

        public void onReceive(Context context, Intent intent) {

            if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {

                StringBuilder sms = new StringBuilder(); // SMS문자를 저장할 곳

                Bundle bundle = intent.getExtras(); // Bundle객체에 문자를 받아온다

 

                if (bundle != null) {

                    // 번들에 포함된 문자 데이터를 객체 배열로 받아온다

                    Object[] pdusObj = (Object[]) 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());

                    }

 

                    String smsBody = sms.toString();

 

                    Pattern pattern = Pattern.compile("\\d{6}");

                    Matcher matcher = pattern.matcher(smsBody);

 

                    if (matcher.find()) {

                        mCertificationNumberEditText.setText(matcher.group(0));

                        mCertificationNumberEditText.setSelection(mCertificationNumberEditText.getText().length());

                    }

 

                }

            }

        }

    };

 

 

그냥 이게 전부인데.. 흠.. 잘 되더니 롤리팝 단말에서 안되네요..

 

롤리팝으로 업그레이드 되면서 뭐 바뀐게 있나요?

 

조언좀 부탁드려요.. (당연히 receive_sms 퍼미션은 줬음)

윤둥이 (4,560 포인트) 님이 2015년 10월 7일 질문

1개의 답변

0 추천
API 확인해보셨나요? OS 버전이 올라가면서 함수 사용법이 변경된것들이 있습니다.
bellfe0402 (1,770 포인트) 님이 2015년 10월 8일 답변
...