본문 바로가기

소프트웨어/Android/Java/Ndk

Android] sms 읽기(문자 이벤트)

git : https://github.com/ManSung-Kim/SMSForwardMS/blob/master/src/com/jactlab/smsforwardms/service/SMSReceiverMS.java



Device로 전송된 SMS를 읽으려면 BroadcastReceiver를 이용하여 "android.provider.Telephony.SMS_RECEIVED" 엑션을 받으면 된다.


% BroadcastReceiver를 사용하는 방법을 정리 해놓은 글이 있는줄 알았는데 찾아보니 없는것같다. 나중에 시간되면 따로 글 빼놔야겠다. 퇴근하고 벌써 22시 44분이라 작성할 시간이 없다..

% 나중에 쓴다는게 깔끔하지 못해서 이 글 작성 미루고 Broadcast 관련 기초 문서 작성

http://mantdu.tistory.com/871



# Reciver에서 sms received Action 받기

 regisetReciver 하기 전에 Intent에 IntentFilter로 "android.provider.Telephony.SMS_RECEIVED";를 추가한다. sms가 날라오면 해당 Intent가 날라온다.


# 문자 string 읽기

 Android SMS는 PDUS(Protocol data unit, https://en.wikipedia.org/wiki/Protocol_data_unit)이라는 형태로 날라온다. PDU는 프로토콜이라 정확한 기술사항을 들여다 볼 시간이 없어서 분석은 못했다. 단순히 우리는 메시지만 사용할 것이기 때문에 아래와 같이 내용을 갖고오면 된다.

(https://developer.android.com/reference/android/telephony/SmsMessage.html#createFromPdu(byte[]))


			Bundle bundle = intent.getExtras();
			Object[] msg = (Object[]) bundle.get("pdus");
			SmsMessage[] smsMsg = new SmsMessage[msg.length];
			
			for(int i=0; i< msg.length; i++) {
				smsMsg[i] = SmsMessage.createFromPdu((byte[])msg[i]);
			}