大家好,今天小编来为大家解答SmsManager(短信管理器)这个问题,很多人还不知道,现在让我们一起来看看吧!
通过这种方式发送短信时,应用程序在安装时可以少一个发送短信的权限。那么360等安全软件在安装时就不会提醒用户:“此APP有短信权限,可能会偷偷发送短信。” ,而用户对于偷偷发短信的行为非常反感。当然,有些人不看就安装了,有些人可能认为它可以偷偷发短信。这是一个非常恶心的应用程序。我不会安装它,否则他们可能会直接禁止我们。如果我们的APP发送短信的话,我们的APP发送短信的时候可能会出现一些异常,或者应用程序直接崩溃等等!所以如果你的应用需要发送短信进行验证或者支付的话,建议使用这种方式!
这需要发送短信的权限。
我们直接调用SmsManager提供的短信接口来发送短信:
sendTextMessage(目的地地址,sc地址,文本,sentIntent,deliverIntent);
参数为:
targetAddress:收件人电话号码scAddress:短信中心号码,如果为空,则使用当前默认的短信服务中心text:短信内容sentIntent:短信发送状态信息:(发送状态Intent) 如果不为空,则消息发送成功发送或者失败的话会广播PendingIntent。结果代码为Activity.RESULT_OK(表示成功),或RESULT_ERROR_GENERIC_FAILURE、RESULT_ERROR_RADIO_OFF 或RESULT_ERROR_NULL_PDU 之一(表示错误)。对应于RESULT_ERROR_GENERIC_FAILURE,sentIntent可能包括一个附加的“错误代码”,其中包含无线电技术特定值,通常仅在修复故障时有用。每个基于SMS 的应用程序都控制sentIntent 的检测。如果sentIntent为空,则调用者将检测所有未知应用程序,这将导致检测到时发送的短信数量较少。 DeliverIntent:短信是否已被对方收到的状态信息:(接收状态Intent) 如果不为空,则当短信发送给接收者时,会广播PendtingIntent,并生成状态报告生成的PDU(参考到对等层)传递的数据单元)将被扩展为data (‘pdu’)
……好复杂,pdu 到底是个什么蛋?好吧,不用担心,只需知道这些参数是:
只需电话号码、消息中心、短信内容,监控消息是否发送成功,监控收件人是否接受!
核心代码:
public void sendSMS(StringphoneNumber,String message){ //获取短信管理器android.telphony.SmsManager smsManager=android.telphony.SmsManager.getDefault(); //分割短信内容(手机短信长度限制),好像有长度限制是140个字符,也就是说//只能发送70个汉字。如果多了,必须分割成多条短信发送//第四个和第五个参数,如果不需要监控发送状态和接收状态,可以写null ListString divideContents=smsManager .divideMessage(message) ; for (String text : divergeContents) { smsManager.sendTextMessage(phoneNumber, null, text, sentPI, DeliverPI); }也许你还需要监控短信是否发送成功或者收件人是否收到消息,只需添加以下内容:
1)处理返回发送状态的sentIntent
//处理返回的发送状态String SENT_SMS_ACTION=’SENT_SMS_ACTION’;意图sentIntent=新意图(SENT_SMS_ACTION); PendingIntent sentPI=PendingIntent.getBroadcast(上下文,0,sentIntent,0); //注册广播接收者上下文用于发送信息。 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context _context, Intent _intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, ‘短信发送成功’, Toast.LENGTH_SHORT).show( ); case SmsManager.RESULT_ERROR_GENERIC_FAILURE: //一般错误break; case SmsManager.RESULT_ERROR_RADIO_OFF: //无线广播被明确关闭break; case SmsManager.RESULT_ERROR_NULL_PDU: //没有提供pdu; case SmsManager.RESULT_ERROR_NO_SERVICE:服务目前不可用break ; } } }, new IntentFilter(SENT_SMS_ACTION));2) 处理返回接收状态的deliverIntent:
//处理返回的接收状态String DELIVERED_SMS_ACTION=’DELIVERED_SMS_ACTION’; //创建接收返回的接收状态的Intent Intent DeliverIntent=new Intent(DELIVERED_SMS_ACTION); PendingIntent DeliverPI=PendingIntent.getBroadcast(context, 0,deliverIntent, 0); context .registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context _context, Intent _intent) { Toast.makeText(context,’接收者已成功接收’, Toast.LENGTH_SHORT).show(); } }, new IntentFilter (DELIVERED_SMS_ACTION));另外,这还涉及到广播方面的知识。如果你对广播不太了解,可以看一下:
Android基础入门教程——BroadcastReceiver测试
Android基础入门教程——4.3.2 BroadcastReceiver泡丁健牛
本节小结:
好了,本节介绍了SmsManager发送短信的两种方式~很简单~建议使用第一种方式,至少用户体验更好.
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/115530.html
用户评论
夜晟洛
这个 SmsManager 真的好用!以前发短信总是需要查找手机自带app,现在一键就能发送了,太方便了!尤其是对于开发者来说,能直接在项目中管理短信真是福音!
有16位网友表示赞同!
葵雨
对于初学者来说,学习这东西还是有点难度。网上教程有限,我看了很多也还是一头雾水,希望能有更详细的指南或者视频教程。
有15位网友表示赞同!
念旧是个瘾。
看样子这个 SmsManager 主要是针对开发者开发的啊,不太适合普通用户使用吧?毕竟我们日常发短信不用这么麻烦,直接用手机自带的app就好。
有9位网友表示赞同!
拉扯
我试过 这个SmsManager 发短信发送速度还挺快,而且有各种功能设置,比如发送时间、接收者限制等等,这让我在开发时能更灵活地控制短信。
有12位网友表示赞同!
断秋风
这个 SmsManager 的api文档比较简洁易懂,对于学习编程的同学来说是个很好的选择! 可以方便地理解如何发送和接收短信消息
有5位网友表示赞同!
水波映月
说实话,我一开始觉得 这个SmsManager 还挺多功能的,但是实际使用下来发现很多功能还是没有用到。而且一些函数名字也很奇怪,没很容易记住。
有14位网友表示赞同!
糖果控
感觉这个 SmsManager 设计得比较完美了!对于各种平台都有支持,而且可以轻松集成到自己的项目中去,这真是太棒了!
有7位网友表示赞同!
纯真ブ已不复存在
最近在开发一个短信提醒系统, 学习 SmsManager 真有点费劲,参数设置什么的不太明白。希望能有人来解答一下我的疑问。
有18位网友表示赞同!
遗憾最汹涌
这个 SmsManager 的功能确实很丰富,可以实现很多定制化操作,对于一些特殊的需求来说非常有用!但是对于普通用户来说,可能有些复杂了
有16位网友表示赞同!
繁华若梦
学习完 SmsManager 发现可以用它来做很多有意思的事情,比如发短信查询、定时发送等等。 感觉这个东西在开发中真的很管用!
有11位网友表示赞同!
歇火
我是个程序员,经常需要和手机后台交互。 这个SmsManager 让我可以轻松地管理发送和接收短信内容,节省了很多时间和精力!
有17位网友表示赞同!
苏莫晨
我想学习如何使用 SmsManager 来开发一款短信查询的应用。 但是教程很少,找不到合适的材料怎么办?
有7位网友表示赞同!
冷眼旁观i
这个 SmsManager 的代码结构比较清晰,注释也很详细,对于新手来说易于理解和使用,值得推荐!
有10位网友表示赞同!
话少情在
不知道 这个SmsManager 是否支持多语言发送? 如果能支持很多语言的话,那将会非常强大!
有6位网友表示赞同!
神经兮兮°
感觉这个 SmsManager 的文档还是不够完善,有些功能的描述不够清晰,希望能够改进一下!
有14位网友表示赞同!
北朽暖栀
最近在做短信营销的项目,发现 这个SmsManager 非常方便! 可以批量发送短信、记录发送状态等等,帮我节省了很多时间和精力
有17位网友表示赞同!
一个人的荒凉
对于一个大型项目的手机开发来说,使用这个 SmsManager 确实是相当不错的选择。 因为它可以确保短信发送的可靠性和稳定性。
有7位网友表示赞同!
半梦半醒i
我一直都在寻找一个高效能管理手机短信的工具, 这个SmsManager 看起来非常完美! 我打算尝试一下看看是不是真的如宣传的那样好用
有16位网友表示赞同!