Android开发之SendSMS短信管理器实现教程
smsmanager
简介
smsmanager(短信管理器)是android提供的另一个非常常见的服务,用于管理手机短信,一般用于实现在app中发送短信的功能smsmanager提供了系列sendxxxmessage()方法用于发送短信。
使用方法
调用smsmanager提供的短信接口sendtextmessage函数即可。
public void sendtextmessage (string destinationaddress, string scaddress, string text, pendingintent sentintent, pendingintent deliveryintent)
用到的参数:
string destinationaddress 收信人电话号码 string scaddress 短信中心的号码,一般用null表示默认 string text 短信的内容 pendingintent sentintent 短信发送状态的信息,一般用null pendingintent deliveryintent 对方接收状态的信息,一般用null源代码
mainactivity.java
package com.example.administrator.sendsms; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.telephony.smsmanager; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.toast; import java.util.arraylist; public class mainactivity extends appcompatactivity { edittext numberet,contentet;//numberedittext,contentedittext button send; smsmanager smananger; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); // 获取smsmanager smananger = smsmanager.getdefault(); // 获取程序界面上的两个文本框和按钮 numberet = (edittext) findviewbyid(r.id.number); contentet = (edittext) findviewbyid(r.id.content); send = (button) findviewbyid(r.id.send); send.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { string phone = numberet.gettext().tostring(); string context = contentet.gettext().tostring(); arraylist list = smananger.pidemessage(context); //因为一条短信有字数限制,因此要将长短信拆分 for(string text:list) { smananger.sendtextmessage(phone,null,text,null,null); } toast.maketext(getapplicationcontext(),"发送完毕",toast.length_short).show(); } }); } }
activity_main.xml
androidmanifest.xml
//获取系统权限,若没有添加下面这句代码,发送短信时会闪退
strings.xml(res/values/strings.xml)
04-sendsms hello world, sendsms! 收件人号码: 短信内容: 发送
注意事项
关于smsmanager
首先要通过getdefault方法获取smsmanager:
// 获取smsmanager smananger = smsmanager.getdefault();
获取了smsmanager之后,调用了pidemessage方法分割长短信:
arraylist list = smananger.pidemessage(context);
之后调用sendtextmessage方法发送短信:
smananger.sendtextmessage(phone,null,text,null,null);
关于string.xml
此例中string.xml的代码如下:
04-sendsms hello world, sendsms! 收件人号码: 短信内容: 发送
从xml语法的角度分析,resources拥有元素内容,因为它包含了其他元素(若干个string),而这若干个string元素除了拥有属性app_name、hello等等,又包含了文本内容。
我们再看activity_main.xml中关于某个textview的代码:
这个textview的android:text属性是@string/number,意思是属性为number的一个string。也就是说,在执行activity_main.xml文件时,它会自动去资源库string.xml里寻找需要的内容。这意味着,如果按照这种方式写,当我们修改string.xml里的内容时,就可以很快改掉activity_main.xml中的内容。
关于pidemessage
一条短信只可容纳70个中文,所以当短信长度超过70个中文字符时程序就要特殊处理了。pidemessage主要用于处理这种情况。
有两种方式可以处理,一种是本例中用到的,用sendtextmessage方法:
if (message.length() > 70) { arraylist msgs = sms.pidemessage(message); for (string msg : msgs) { sms.sendtextmessage(phonenumber, null, msg, null, null); } } else { sms.sendtextmessage(phonenumber, null, message, sentpi, deliverpi); }
一种是用sendmultiparttextmessage方法:
if (message.length() > 70) { arraylist msgs = sms.pidemessage(message); arraylistsentintents = new arraylist (); for(int i = 0;i
上一篇: Android 友盟推送原理解析