短信发送器的简单实现

短信的发送主要利用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没有构造方法,因此不能new SmsManager,而要用下面这种写法:
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"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值