안녕하세요 초보개발자입니다.
문자메세지를 가져와서 인증번호 자동입력되로록 구현했습니다.
그런데 롤리팝에서는 동작을 안하네요;;
아래는 소스입니다.
// 문자 수신 리시버 등록.
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 퍼미션은 줬음)