利用短信管理器SmsManager编写简易短信发送器
SMSActivity类代码:
package com.example.androidtest;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class SMSActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms);
Button btnSend = (Button)findViewById(R.id.btn_send);
//为发送短信按钮添加事件
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TextView telNumber = (TextView)findViewById(R.id.telnumber);
TextView telContent = (TextView)findViewById(R.id.content);
String sTelNumber = telNumber.getText().toString();
String sContent = telContent.getText().toString();
//检查手机号码是否为空
if("".equals(sTelNumber.trim())){
Toast.makeText(SMSActivity.this, "请输入手机号码", 1).show();
return;
}
SmsManager smsManager = SmsManager.getDefault();
List<String> contents = smsManager.divideMessage(sContent); //当短信内容过多时,对短信进行拆分
//循环发送短信
for(String _content : contents){
smsManager.sendTextMessage(sTelNumber, null, _content, null, null);
}
Toast.makeText(SMSActivity.this, "已发送", 1).show();
//清空手机号码和短信内容
telNumber.setText("");
telContent.setText("");
}
});
}
}
需要注意的是,在这里我们用到了发短息服务,因此我们必须申请发短息的权限:在AndroidMainfest.xml中添加
<uses-permission android:name="android.permission.SEND_SMS"/>
这里,我们用到了SmsManager类中的几个重要的方法:
divideMessage(String text):当短信内容超过每条短信的字数限制时,我们对短信内容拆分成多条发送
divideMessage(String text):当短信内容超过每条短信的字数限制时,我们对短信内容拆分成多条发送
sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent);
destinationAddress | 发送短信的地址(也就是号码) |
scAddress | 短信服务中心,如果为null,就是用当前默认的短信服务中心 |
text | 短信内容 |
sentIntent | 如果不为null,当短信发送成功或者失败时,这个PendingIntent会被广播出去成功的结果代码是Activity.RESULT_OK,或者下面这些错误之一 RESULT_ERROR_GENERIC_FAILURE、 RESULT_ERROR_RADIO_OFF、 RESULT_ERROR_NULL_PDU 对于 RESULT_ERROR_GENERIC_FAILURE , 这个sentIntent可能包括额外的"errorCode",包含一些具体有用的信息帮助检查 。基于SMS控制的全部程序检查 sentIntent. |
deliveryIntent | 如果不为null,当这个短信发送到接收者那里,这个PendtingIntent会被广播,状态报告生成的pdu(指对等层次之间传递的数据单位)会拓展到数据("pdu") |
测试结果:
发送:
接收:
这里有个问题暂时还没解决,当发送中文信息的时候,接收到的是乱码!不过,貌似真实手机是不会有中文乱码的!