반응형
문자보내기 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
반응형
'안드로이드' 카테고리의 다른 글
[Android] 인앱 개발에 대해 알아보자 (실전) (0) | 2022.10.20 |
---|---|
[Android] 인앱 결제(inapp billing) 순서 (0) | 2022.10.20 |
[Android] 녹음 기능 RecMic to Mp3 (0) | 2022.10.20 |
[Android] 네비게이션(Navigation)에 대해 알아보자 (0) | 2022.09.22 |
Stack vs Heap (0) | 2022.09.20 |