본문 바로가기
Front-end/Android (안드로이드 앱 개발)

Android Studio , 시스템 메시지 : BroadcastReceiver [문자 메시지 읽기]

by javapp 자바앱 2020. 8. 2.
728x90

 

1.  권한 설정

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

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

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

 

 

2.  BroadcastReceiver 파일 생성

 

public class SystemReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //메니페스트의 인텐트 필터를 intent가 받는다.
        //안드로이드 os가 리시버를 찾기 위해 사용했던 이름을 추출한다.
        String action = intent.getAction();
        //리시버의 이름으로 분기한다.
        switch (action)
        {
            case "android.intent.action.BOOT_COMPLETED" :
                Toast.makeText(context,"부팅완료",Toast.LENGTH_SHORT).show();
                break;
            case "android.provider.Telephony.SMS_RECEIVED" :
                //bundle : 인텐트의 객체들을 한번에 추출, 문자 메시지 정보를 가지고 있는 객체를 추출
                Bundle bundle = intent.getExtras();
                if(bundle != null){
                    //번들에서 문자 메시지 정보 객체를 추출한다.
                    Object[] obj = (Object [])bundle.get("pdus");
                    //문자 메시지 정보 객체를 이용해 SmsMessage 객체를 생성
                    SmsMessage[] msgs = new SmsMessage[obj.length];
                    for(int i=0; i < obj.length; i++){
                        msgs[i] = SmsMessage.createFromPdu((byte[])obj[i]);
                    }
                    //문자 메시지 정보를 추출한다.
                    for(SmsMessage msg : msgs){
                        String number = msg.getOriginatingAddress();
                        String str = msg.getMessageBody();
                        String toastMsg = number + ": " + str;
                        Toast.makeText(context,toastMsg,Toast.LENGTH_LONG).show();
                    }
                }
                break;
        }
    }
}

 

 

3. 인텐트 필터

<receiver
    android:name=".SystemReceiver"
    android:enabled="true"
    android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
</receiver>

 

4. 메인은 권한 허락 설정 하기

5. test

문자 메시지로 온 값을

토스트 메시지로 출력 성공

댓글