출처를 항상 함께 퍼가주세요.
=========================================================================================================================================
xml 레이아웃은 간단하기 때문에 생략하고,
#SmsSendActivity.java
public class SmsSendActivity extends Activity implements OnClickListener {
private final static String TAG = "SmsSendActivity";
private final static String SMS_SEND = "SMS_SEND";
private final static String SMS_DELIVER = "SMS_DELIVER";
Button mSend, mCancel;
EditText mPhoneNumber, mSendMessage;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sms_send);
initLayout();
}
private void initLayout() {
mSend = (Button) findViewById(R.id.send);
mCancel = (Button) findViewById(R.id.send);
mPhoneNumber = (EditText) findViewById(R.id.phoneNumber);
mSendMessage = (EditText) findViewById(R.id.sendMessage);
mSend.setOnClickListener(this);
mCancel.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.send :
String phoneNumber = mPhoneNumber.getText().toString();
String message = mSendMessage.getText().toString();
sendSMS(phoneNumber, message);
break;
case R.id.cancel :
mPhoneNumber.setText("");
mSendMessage.setText("");
break;
}
}
private void sendSMS(String phoneNumber, String message) {
PendingIntent sendPI = PendingIntent.getBroadcast(this, 0, new Intent(SMS_SEND), 0);
PendingIntent deliverPI = PendingIntent.getBroadcast(this, 0, new Intent(SMS_DELIVER), 0);
registerReceiver(SendSmsResult, new IntentFilter(SMS_SEND));
registerReceiver(DeliverSmsResult, new IntentFilter(SMS_DELIVER));
SmsManager sms = SmsManager.getDefault();
// 보내는사람, 통신사, 내용, 전송결과, 전송완료여부
sms.sendTextMessage(phoneNumber, null, message, sendPI, deliverPI);
// sms.sendMultipartTextMessage(destinationAddress, scAddress, parts, sentIntents, deliveryIntents);
// sms.sendDataMessage(destinationAddress, scAddress, destinationPort, data, sentIntent, deliveryIntent);
mSendMessage.setText("");
}
BroadcastReceiver SendSmsResult = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK :
Toast.makeText(SmsSendActivity.this, "전송 성공", Toast.LENGTH_LONG).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE :
Toast.makeText(SmsSendActivity.this, "RESULT_ERROR_GENERIC_FAILURE", Toast.LENGTH_LONG).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE :
Toast.makeText(SmsSendActivity.this, "RESULT_ERROR_NO_SERVICE", Toast.LENGTH_LONG).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU :
Toast.makeText(SmsSendActivity.this, "RESULT_ERROR_NULL_PDU", Toast.LENGTH_LONG).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF :
Toast.makeText(SmsSendActivity.this, "RESULT_ERROR_RADIO_OFF", Toast.LENGTH_LONG).show();
break;
}
}
};
BroadcastReceiver DeliverSmsResult = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK :
Toast.makeText(SmsSendActivity.this, "Activity.RESULT_OK", Toast.LENGTH_LONG).show();
break;
case Activity.RESULT_CANCELED :
Toast.makeText(SmsSendActivity.this, "Activity.RESULT_CANCELED", Toast.LENGTH_LONG).show();
break;
}
}
};
}
대략 이런식으로 전송결과에 대한 2개의 BroadcastReceiver를 생성하고, PendingIntent를 이용해서 사용하면 되는듯.
================================================================================================================================================
메세지를 받을 때는,
#SmsReceiveActivity.java
public class SmsReceiveActivity extends Activity {
TextView mReceivedMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sms_receive);
mReceivedMessage = (TextView) findViewById(R.id.receivedMessage);
mReceivedMessage.setText("");
Intent intent = getIntent();
String message = intent.getStringExtra("SMS_RECEIVE");
mReceivedMessage.setText(message);
}
}
#SmsReceiver.java
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String message = "";
if(bundle != null) {
Object[] pdus = (Object[])bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0 ; i<msgs.length ; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
message += "\nSMS getOriginatingAddress : " + msgs[i].getOriginatingAddress();
message += "\nSMS getDisplayOriginatingAddress : " + msgs[i].getDisplayOriginatingAddress();
message += "\nSMS getUserData : " + msgs[i].getUserData();
message += "\nSMS getProtocolIdentifier : " + msgs[i].getProtocolIdentifier();
message += "\nSMS getPseudoSubject : " + msgs[i].getPseudoSubject();
message += "\nSMS getServiceCenterAddress : " + msgs[i].getServiceCenterAddress();
message += "\n\n";
message += "\nSMS Body : " + msgs[i].getMessageBody().toString();
message += "\n";
}
}
// Toast.makeText(context, message, Toast.LENGTH_LONG).show();
Intent smsIntent = new Intent(context, SmsReceiveActivity.class);
smsIntent.putExtra("SMS_RECEIVE", message);
smsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(smsIntent);
}
}
가장 상위 클래스에서 BroadcastReceiver를 상속받았으니, 현재 SmsReceiver 는 매니페스트에서 receiver로 등록해줘야 하겠지.
========================================================================================================================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mfamstory.test.sms"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="SmsSendActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<activity android:name="SmsReceiveActivity" />
</application>
</manifest>
======================================================================================================================================
그럼 이제 문자가 오면
'개발 > 안드로이드' 카테고리의 다른 글
[번역] 안드로이드 - Painless Threading (0) | 2012.04.13 |
---|---|
[번역] 안드로이드 멀티 스레드를 통한 성능 향상(이미지 다운로드) (0) | 2012.04.13 |
연락처 추가하는 화면 띄우기. (0) | 2012.02.06 |
전체 MediaScan(미디어 스캔) 수동으로 하기 && MediaScan 원하는 부분만 하기 (0) | 2012.02.06 |
ListView, GridView 등... 스크롤링 상태 체크하기. (0) | 2012.02.06 |
댓글