短信的发送主要利用SmsManager对象实现
下面为实现短信发送功能的代码:
public class MainActivity extends Activity {
private EditText et_number;
private EditText et_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取电话号码和短信内容
et_number = (EditText) findViewById(R.id.et_number);
et_content = (EditText) findViewById(R.id.et_content);
}
public void sendSms(View view){
String number = et_number.getText().toString().trim();
String content = et_content.getText().toString();
if(TextUtils.isEmpty(number)||TextUtils.isEmpty(content)){
Toast.makeText(this, "号码或者内容不能为空", 0).show();
}else{
SmsManager smsManager = SmsManager.getDefault();
//为防止短信内容过长,将其自动分段,使每段长度不大于最大长度;如短信内容小于最大长度,则不分段
ArrayList<String> messages = smsManager.divideMessage(content);
for(String message : messages){
smsManager.sendTextMessage(number, null, message, null, null);
}
Toast.makeText(this, "发送成功", Toast.LENGTH_LONG).show();
}
}
}
SmsManager smsManager = SmsManager.getDefault();
由于短信的长度是有最大长度限制的,因此如果输入内容过长,则需要利用SmsManager的divideMessage方法将其分割为多个片段,每个片段内容小于最大长度,然后再发送内容。
SmsManager中可以选择的发送类型有三种:
1.void SendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data,PendingIntent sentIntent, PendingIntent deliveryIntent)
1)destinationAddress——消息的目标地址
2)scAddress——服务中心的地址or为空使用当前默认的SMSC
3)destinationPort——消息的目标端口号
4)data——消息的主体,即消息要发送的数据
5)sentIntent——如果不为空,当消息成功发送或失败这个PendingIntent就广播。结果代码是Activity.RESULT_OK表示成功,或RESULT_ERROR_GENERIC_FAILURE、RESULT_ERROR_RADIO_OFF、RESULT_ERROR_NULL_PDU之一表示错误。对应RESULT_ERROR_GENERIC_FAILURE,sentIntent可能包括额外的“错误代码”包含一个无线电广播技术特定的值,通常只在修复故障时有用。 每一个基于SMS的应用程序控制检测sentIntent。如果sentIntent是空,调用者将检测所有未知的应用程序,这将导致在检测的时候发送较小数量的SMS。
6)deliveryIntent——如果不为空,当消息成功传送到接收者这个PendingIntent就广播。
2.void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts,ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliverIntents)
发送一个基于SMS的多部分文本,调用者应用已经通过调用divideMessage(String text)将消息分割成正确的大小。
3.void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent,PendingIntent deliveryIntent)
发送简单文本信息,各参数含义与前面基本相同
当然,最后要在manifest文件中添加权限
<uses-permission android:name="android.permission.SEND_SMS"/>