public void getSMS(){
final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

IntentFilter filter = new IntentFilter();
filter.setPriority(999); // 우선순위를 높여서 문자를 가장 먼저 인식한다.
filter.addAction(ACTION);

//브로드캐스트 생성
mBroadcastReceiver = new BroadcastReceiver(){

@Override
public void onReceive(Context context, Intent intent){

if (intent.getAction().equals(ACTION)){

Bundle bundle = intent.getExtras();
if (bundle == null)
return;

Object[] pdusObj = (Object[]) bundle.get("pdus");

if (pdusObj == null)
return;

SmsMessage[] smsMessages = new SmsMessage[pdusObj.length];

for (int i = 0; i < pdusObj.length; i++){
smsMessages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
abstrackNumber(smsMessages[i].getMessageBody());
}

this.abortBroadcast();

}

}

};

registerReceiver(mBroadcastReceiver, filter);
}

브로드캐스트리시버는 전역으로 Activity에 선언한다.


private void getAuthNumber(String message){

//담겨진 문자에서 인증 번호만 추출하기 위해 정규식을 사용.
Pattern p = Pattern.compile("([^\\d])");
Matcher matcher = p.matcher(message);
StringBuffer destStringBuffer = new StringBuffer();

while (matcher.find()){
matcher.appendReplacement(destStringBuffer, "");
}

Toast.makeText(this, destStringBuffer, Toast.LENGTH_SHORT).show();
matcher.appendTail(destStringBuffer);
edConfirm.setText(destStringBuffer.toString());
}

실질적으로 sms를 캐치해서 '[' ']' 안에 담긴 인증번로를 가져와서 edConfirm EditText에 보여준다.


출처:

http://junkworld.tistory.com/entry/android-%EB%AC%B8%EC%9E%90-%EC%9D%B8%EC%A6%9D%EB%B2%88%ED%98%B8-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EB%B6%99%EC%9D%B4%EA%B8%B0



P.S createFromPdu가 deprecated인데...귀찮네...나중에 바꿔야지...ㅡㅡ;;;

복사했습니다!