안드로이드

[Android] 문자 보내기 (SEND_SMS)

코딩하는후운 2022. 10. 20. 13:44
반응형

문자보내기 EX)

1.Manifest
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />


2.브로드캐스트 리시버 등록
<receiver android:name ="whdghks913.tistory.examplesendsms.SMSBroadCast">
	<intent-filter android:priority="9999">
		<action android:name="android.provider.Telephony.SMS_RECEIVED" />
	</intent-filter>
</receiver>




3.브로드캐스트 
@Override
public void onReceive(Context mContext, Intent intent) {
	String action =  intent.getAction();
	
	if("android.provider.Telephony.SMS_RECEIVED".equals(action)){
		/**
		 * SMS메세지 파싱
		 */
		Bundle bundle = intent.getExtras();
		Object messages[] = (Object[])bundle.get("pdus");
		SmsMessage smsMessage[] = new SmsMessage[messages.length];

		for(int i = 0; i < messages.length; i++) {
			/**
			 * PDU포멧의 SMS를 변환합니다
			 */
			smsMessage[i] = SmsMessage.createFromPdu((byte[])messages[i]);
		}
		
		/**
		 * 날짜 형식을 우리나라에 맞도록 변환합니다
		 */
		Date curDate = new Date(smsMessage[0].getTimestampMillis());
		SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초", Locale.KOREA);
		
		String originDate = mDateFormat.format(curDate);
		String origNumber = smsMessage[0].getOriginatingAddress();
		String Message = smsMessage[0].getMessageBody().toString();
		
		Intent showSMSIntent = new Intent(mContext, ShowSMSActivity.class);
		showSMSIntent.putExtra("originNum", origNumber);
		showSMSIntent.putExtra("smsDate", originDate);
		showSMSIntent.putExtra("originText", Message);
		
		showSMSIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		
		mContext.startActivity(showSMSIntent);
	}
}



4.SMS 문자왔을 때 보는 화면
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_showsms);
	
	TextView smsDate = (TextView) findViewById(R.id.smsDate);
	TextView originNum = (TextView) findViewById(R.id.originNum);
	TextView originText = (TextView) findViewById(R.id.originText);
	
	Intent smsIntent = getIntent();
	
	String originNumber = smsIntent.getStringExtra("originNum");
	String originDate = smsIntent.getStringExtra("smsDate");
	String originSmsText = smsIntent.getStringExtra("originText");
	
	originNum.setText(originNumber);
	smsDate.setText(originDate);
	originText.setText(originSmsText);
}



5. 메인 액티비티
public class MainActivity extends Activity {
    Context mContext;
    EditText smsNumber, smsTextContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mContext = this;
        
        smsNumber = (EditText) findViewById(R.id.smsNumber);
        smsTextContext = (EditText) findViewById(R.id.smsText);
    }
    
    public void sendSMS(View v){
        String smsNum = smsNumber.getText().toString();
        String smsText = smsTextContext.getText().toString();
        
        if (smsNum.length()>0 && smsText.length()>0){
            sendSMS(smsNum, smsText);
        }else{
            Toast.makeText(this, "모두 입력해 주세요", Toast.LENGTH_SHORT).show();
        }
    }
    
    public void sendSMS(String smsNumber, String smsText){
        PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT_ACTION"), 0);
        PendingIntent deliveredIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED_ACTION"), 0);
        
        /**
         * SMS가 발송될때 실행
         * When the SMS massage has been sent
         */
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                switch(getResultCode()){
                    case Activity.RESULT_OK:
                        // 전송 성공
                        Toast.makeText(mContext, "전송 완료", Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        // 전송 실패
                        Toast.makeText(mContext, "전송 실패", Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        // 서비스 지역 아님
                        Toast.makeText(mContext, "서비스 지역이 아닙니다", Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        // 무선 꺼짐
                        Toast.makeText(mContext, "무선(Radio)가 꺼져있습니다", Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        // PDU 실패
                        Toast.makeText(mContext, "PDU Null", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        }, new IntentFilter("SMS_SENT_ACTION"));
        
        /**
         * SMS가 도착했을때 실행
         * When the SMS massage has been delivered
         */
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                switch (getResultCode()){
                    case Activity.RESULT_OK:
                        // 도착 완료
                        Toast.makeText(mContext, "SMS 도착 완료", Toast.LENGTH_SHORT).show();
                        break;
                    case Activity.RESULT_CANCELED:
                        // 도착 안됨
                        Toast.makeText(mContext, "SMS 도착 실패", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        }, new IntentFilter("SMS_DELIVERED_ACTION"));
        
		/**
         * destinationAddress : 받는사람의 Phone Number입니다 신기하게도 String형식입니다
			scAddress : 이건 잘 모르겠습니다 일단 null을 입력해 주세요 (구글API : is the service center address or null to use the current default SMSC)
			text : 문자의 내용입니다
			sentIntent : 문자 전송에 관련한 PendingIntent입니다 null을 넣어도 되지만 저는 전송 확인결과를 알아보기 위해 이것도 사용할 예정입니다
			deliveryIntent : 문자 도착에 관련한 PendingIntent라고 합니다 null을 넣어도 되지만 한번 이것도 사용해 보겠습니다
         */
        SmsManager mSmsManager = SmsManager.getDefault();
        mSmsManager.sendTextMessage(smsNumber, null, smsText, sentIntent, deliveredIntent);
    }
}

 

참조 :
http://android-developers-kr.blogspot.kr/2013/10/blog-post_15.html

반응형