메뉴 건너뛰기

2015.06.29 22:33

android SMS 리시버

조회 수 6870 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1. AndroidManifest.xml 파일에 필요한 권한을 준다. 

 

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

2. AndroidManaifest.xml 파일에 SMS를 수신할 리시버를 등록한다.

 

  <receiver android:name="kr.inclass.smscapture.SMSReceiver">
   <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
   </intent-filter>
  </receiver>

 

즉... SMS가 도착하면 안드로이드가 SMSReceiver에게 그 사실을 알려준다. 

3. 리시버는 BroadcastReceiver로부터 상속받아서 클래스를 만들어야 한다. 리시버 클래스를 만든다.

 

public class SMSReceiver extends BroadcastReceiver {

...

}

 

4. BroadcastReceiver는 onReceive 함수를 오버라이드해야 한다. 이 함수가 SMS 수신시 호출되는 함수이다. onReceive 함수를 오버라이드해준다.

 

private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; // 액션명을 문자열 상수로 정의해준다.

 

@Override

public void onReceive(Context context, Intent intent) {

 String actionName = intent.getAction();

if ( ! actionName.equals(ACTION_SMS_RECEIVED) ) return;  // 인텐트필터에 리시버가 호출되는 필터를 지정해줬는데, 왜 굳이 액션을 검사하는지는 모르겠다.

 

Bundle extras = intent.getExtras();

if ( extras == null ) return;

 

Object[] pdus = (Object[]) extras.get("pdus");  // 넘겨받은 인텐트의 extra데이터로 pdu 객체들이 넘어온다. pdu 객체란거는 sms 패킷단위이다. 즉, 수신된 sms의 정보를 담고 있는 패킷이다.

 

if ( pdus == null ) return;

 

SmsMessage[] msgs = new SmsMessage[pdus.length]; // 수신된 sms 객체갯수만큼 SmsMessage 객체를 생성한다.

 

for ( int i=0 ; i<pdus.length; i++ ) {

 

msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);  // pdu 객체로부터 SmsMessage 객체를 생성한다.

 

String number = msgs[i].getOriginatingAddress(); // 발신자의 전화번호를 얻는다.

String message = msg[i].getDisplayMessageBody().toString(); // 발신내용을 얻는다.

String date = getFormattedDate(msgs[i].getTimestampMillis()); // 발신한 시간을 구한다.

 

// 얻은 데이터로 필요한 처리를 한다. 주의할 점은 인터넷, 디스크IO 등과 같은 작업은 스레드로 처리해야 한다는 것이다. 그렇지 않으면 리시버가 죽는다.

}

 

 

}

 

// 타임스탬프를 보기편한 문자열로 변환

private String getFormattedDate(long timestampmiliseconds) {

final Calendar cal = Calendar.getInstance();

cal.setTimeInMillis(timestampmiliseconds);

return cal.getTime().toLocaleString();

}


List of Articles
번호 제목 날짜 조회 수
137 Android] 안드로이드 홈 디렉토리 알아내기 2015.12.15 6895
136 안드로이드 로그인유지 코드 2015.12.14 8807
135 Android Push GCM 서버 구성 하기(3) file 2015.12.14 6388
134 안드로이드 EditText 필터링 검색 file 2015.12.14 7686
133 안드로이드 EditText 필터링 검색 구현(adapter.getFilter().filter(cs)) file 2015.12.14 8759
132 JAVA JDBC를 사용하여 MySQL과 연동 file 2015.11.21 8644
131 안드로이드 로그인 화면 만들기 file 2015.09.05 8043
130 [안드로이드] 리스트 뷰의 한 항목에 대한 컨텍스트 메뉴 만들기 file 2015.09.04 9080
129 [안드로이드] 빠르게 사용할수 있는 컨텍스트 메뉴 만들기 file 2015.09.03 6789
128 [안드로이드] 팝업메뉴 사용법 file 2015.09.03 9390
127 [안드로이드] 콘텍스트 메뉴 사용예제 file 2015.09.03 7345
126 안드로이드 기본어플 예제 어플소스 모음 2015.08.17 8861
125 [안드로이드 강좌] 초보자들이 많이 하는 실수 file 2015.08.11 6832
124 manifest 의 launchMode 속성 2015.08.11 7576
123 Android Navigation Drawer API 공개! 디자인 가이드 살펴보기 file 2015.07.29 8141
122 내가 입력한 글자 Toast로 나오게 하기 file 2015.07.26 6896
121 버튼 누르면 이미지 바꾸기 file 2015.07.26 6613
120 화면 전환해도 데이터 유지 예제 2015.07.26 9204
119 안드로이드 채팅 소스 샘플 file 2015.07.26 10088
118 안드로이드 로딩화면 샘플 file 2015.07.26 7576
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved