메뉴 건너뛰기

2015.06.29 22:33

android SMS 리시버

조회 수 6871 추천 수 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();

}


  1. Android] 안드로이드 홈 디렉토리 알아내기

    Date2015.12.15 Views6895
    Read More
  2. Android] Fragment 내부의adapter에서 startActivity 하기

    Date2015.12.15 Views6487
    Read More
  3. AndroidManifest에 선언한 메타데이터(meta-data) 가져오기

    Date2016.06.10 Views9321
    Read More
  4. android.support.v4.content.FileProvider not found

    Date2020.12.14 Views308
    Read More
  5. Android 와 JSP 간 파라미터 암복호화 (3)

    Date2016.05.26 Views8088
    Read More
  6. Android 와 JSP 간 파라미터 암복호화 (2)

    Date2016.05.26 Views7741
    Read More
  7. Android 와 JSP 간 파라미터 암복호화 (1)

    Date2016.05.26 Views7474
    Read More
  8. Android 간단한 회원 가입 폼 만들기 for Mac (PHPMyAdmin 이용)

    Date2015.07.10 Views10511
    Read More
  9. Android TIP] strings.xml 에서 특수문자 사용하기

    Date2015.12.15 Views6629
    Read More
  10. Android Studio에서 SQLCipher 라이브러리 추가 방법

    Date2018.10.02 Views1776
    Read More
  11. android SMS 리시버

    Date2015.06.29 Views6871
    Read More
  12. Android Push GCM 프로젝트 앱 적용 하기(2)

    Date2016.03.18 Views8956
    Read More
  13. Android Push GCM 서버 구성 하기(3)

    Date2015.12.14 Views6388
    Read More
  14. Android Navigation Drawer API 공개! 디자인 가이드 살펴보기

    Date2015.07.29 Views8141
    Read More
  15. Android Login and Registration with PHP, MySQL and SQLite

    Date2015.07.16 Views14178
    Read More
  16. Activity Switching / 안드로이드 액티비티 전환 / 화면 전환

    Date2016.06.07 Views8311
    Read More
  17. Activity Data Transfor/ 액티비티 이동간에 데이터 전송하기

    Date2016.06.07 Views7676
    Read More
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved