SMSActivity.java
package src.sms;
import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class SMSActivity extends Activity {
private String m_currentTelNumber;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//设置短信UI
//设置拨号按钮的事件监听器
Button smsButton = (Button) findViewById(R.id.smsButton);
smsButton.setOnClickListener(new SmsButtonListener());
}
/**
* 使用SmsMessage来发送短信
*/
private class SmsButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
m_currentTelNumber = "09xxxxxxxxxxx";
EditText messageBody = (EditText) findViewById(R.id.sms_message);
//调用一个短信管理器
SmsManager smsManager = SmsManager.getDefault();
//使用短信管理传送信息
smsManager.sendTextMessage(m_currentTelNumber, null, messageBody.getText().toString(), null, null);
//调用一个Toast信息确定函数有被执行
String toastMessage = String.format("To:%1$s\nMessage Body:%2$s", m_currentTelNumber,messageBody.getText().toString());
Toast.makeText(SMSActivity.this, toastMessage, Toast.LENGTH_LONG).show();
}
}
}
广播机制,监控短信接收
SmsReceiver.java
package src.sms.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.widget.Toast;
/**
* 监控短信接收 SmsReceiver实现BroadcastReceiver,
* 当Android系统广播SMS_RECEIVED时就接收,并产生一个信息确认有接收到
*/
public class SmsReceiver extends BroadcastReceiver {
// 设置ACTION字符串来比对intent是否为接收短信
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
// 只有属于接收短信的内容才需要处理
if (intent != null && intent.getAction() != null
&& (ACTION.compareToIgnoreCase(intent.getAction()) == 0)) {
// 从Intent 中读取pdu的资料
Object[] pduData = (Object[]) intent.getExtras().get("pdus");
// 依照pduData的数组大小来添加一个短信的数组
SmsMessage[] smsArray = new SmsMessage[pduData.length];
// 将数据写入短信数组并且列出内容
for (int i = 0; i < pduData.length; i++) {
smsArray[i] = SmsMessage.createFromPdu((byte[]) pduData[i]);
String toastMessage = String
.format("Message clip #%3$d, \n From : %2$s, \n Message Body: %1$s",
smsArray[i].getMessageBody(),
smsArray[i].getOriginatingAddress(),
i);
Toast.makeText(context, toastMessage, Toast.LENGTH_LONG).show();
}
}
}
}
注册广播机制和添加权限
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="src.sms"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".SMSActivity"
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=".receiver.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>
</manifest>