SMS 수신하기 (브로드캐스트 사용)



java)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package ghj.com.recvsms;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
 
/**
 * Created by gwonhyeogjun on 2017. 6. 6..
 */
 
public class ReceiveSMS extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        SmsMessage[] msg;
        String receive = "";
 
        if(bundle!=null){
            //pdu 얻기
            Object[] pdus = (Object[])bundle.get("pdus");
            msg = new SmsMessage[pdus.length];
            for(int i=0; i<msg.length; i++){
                //PDU로부터 SmsMessage 객체로 변환
                if(Build.VERSION.SDK_INT>=23){
                    msg[i] = SmsMessage.createFromPdu((byte[])pdus[i], "3gpp");
                }else{
                    msg[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                }
 
                //PDU로부터 전환번호 , 메시지를 반환
                receive += msg[i].getOriginatingAddress()+" : "+msg[i].getMessageBody().toString();
            }
            Toast.makeText(context, receive, Toast.LENGTH_SHORT).show();
        }
    }
}
cs



AndroidManifest.xml)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    <application>
        ...
        <receiver android:name=".ReceiveSMS">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
            </intent-filter>
        </receiver>
    </application>
 
 
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
 

cs



결과

+ Recent posts