문자를 보내는 방법은, 다음과 같다.
1. AndroidManifest.xml 파일에 퍼미션을 추가한다.
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
2. 자바 코드에 코드를 추가한다.
전화기능이 없는 갤탭 10인치에서는 NoService가 옴.
public class MainActivity extends Activity {
private Button btnSendSMS;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.btnSendSMS).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendSMS("01012345678", "Send, sms, please.!");
}
});
}
/**
* 문자를 보내는 메소드
* @param phoneNumber
* @param message
*/
private void sendSMS(String phoneNumber, String message){
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
// 문자 보내는 상태를 감지하는 PendingIntent
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
// 문자 받은 상태를 감지하는 PendingIntent
// 문자 받은 상태를 감지하는 PendingIntent
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
// 문자 보내는 상태를 감지하는 BroadcastReceiver를 등록한다.
registerReceiver(new BroadcastReceiver() {
// 문자를 수신하면, 발생.
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));
// 문자를 받는 상태를 확인하는 BroadcastReceiver를 등록.
registerReceiver(new BroadcastReceiver() {
// 문자를 받게 되면, 불린다.
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS delivered", Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(DELIVERED));
// SmsManager를 가져온다.
SmsManager sms = SmsManager.getDefault();
// sms를 보낸다.
// sms를 보낸다.
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}
}
※ 문자를 보내는 메소드 설명.
sms.sendTextMessage(String destinationAddress, scAddress, Stringn text, PendingIntent sendIntent, deliveryIntent);
destinationAddress, phoneNumber,
scAddress - Service center address, use null for default SMSC
text - SMS message
sendIntent - pending intent to invoke when the message is sent
deliveryIntent - pending intent to invoke when the message has been delivered.
만약, 문자를 수신하는상태 및 보낸 상태를 파악하고 싶지 않으면, sendIntent, deliveryIntent를 null로 주면 된다.
※ 문자를 보내는 기능이 없는 갤럭시 탭 와이파이 버전같은 경우,
SmsManager.RESULT_ERROR_NO_SERVICE: 콜백이 onReceive에서 온다.
관련글.
2011/12/30 - [Programming/android] - 안드로이드 문자 보내기 (2)
※ 문자를 보내는 기능이 없는 갤럭시 탭 와이파이 버전같은 경우,
SmsManager.RESULT_ERROR_NO_SERVICE: 콜백이 onReceive에서 온다.
관련글.
2011/12/30 - [Programming/android] - 안드로이드 문자 보내기 (2)
'Programming > android' 카테고리의 다른 글
android NDK 개발하기 설정. (0) | 2012.05.25 |
---|---|
안드로이드 문자 보내기 (2) (0) | 2011.12.30 |
Intent.FLAG_ACTIVITY_CLEAR_TOP (0) | 2011.12.24 |
카카오톡 처럼 팝업 올라오게 하기. (0) | 2011.11.30 |
안드로이드 단말기 MacAddress 가져오기. (0) | 2011.11.21 |