android发送短信的两种方式,发送长短信的两种方式,群发短信
android 发送短信的方法
方法一:调用系统的短信APP,发送短信。
Intent smsIntent = new Intent(Intent.ACTION_VIEW);smsIntent.setData(Uri.parse("smsto:"));smsIntent.setType("vnd.android-dir/mms-sms");//必须指定typesmsIntent.putExtra("address", new String("15050524563"));//address字段不能改smsIntent.putExtra("sms_body", "测试");//sms_body 不能改startActivity(smsIntent);
或者
<span style="white-space:pre"> </span> Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+ "15050524525")); intent.putExtra("sms_body", "测试"); startActivity(intent);
方法二:调用系统发送短信接口(此方法可以实现短信发送成功后回调)
利用SmsManager 发送短信参数说明。
SmsManager smsManager = SmsManager.getDefault();smsManager.sendTextMessage(String destinationAddress, String scAddress, String text,PendingIntent sentIntent, PendingIntent deliveryIntent); /*** 参数说明* destinationAddress:收信人的手机号码* scAddress:发信人的手机号码 * text:发送信息的内容 * sentIntent:发送是否成功的回执,用于监听短信是否发送成功。* DeliveryIntent:接收是否成功的回执,用于监听短信对方是否接收成功。*/
注册监听器:定义IntentFilter,注册BroadcastReceiver.
private void initBroadcastReceiver() {//发送短信状态IntentFilter sendIntentFilter = new IntentFilter();sendIntentFilter.addAction(SENT_SMS_ACTION);sendBroadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("发送短信状态");switch (getResultCode()) {case Activity.RESULT_OK:Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT).show();break;case SmsManager.RESULT_ERROR_GENERIC_FAILURE:break;case SmsManager.RESULT_ERROR_RADIO_OFF:break;case SmsManager.RESULT_ERROR_NULL_PDU:break;}}};registerReceiver(sendBroadcastReceiver, sendIntentFilter);//接收短信状态IntentFilter deliverIntentFilter = new IntentFilter();deliverIntentFilter.addAction(DELIVERED_SMS_ACTION);deliverBroadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("接收短信状态");Toast.makeText(context, "收信人已经成功接收", Toast.LENGTH_SHORT).show();}};registerReceiver(deliverBroadcastReceiver, deliverIntentFilter);}
点击按钮发送短信: 定义了发送状态和接收状态的PendingIntent。调用sendTextMessage 方法。
protected void sendMessageByInterface1() {String phoneNumber = vSendNo.getText().toString().trim();String message = vSendContent.getText().toString().trim();SmsManager sms = SmsManager.getDefault();Intent sentIntent = new Intent(SENT_SMS_ACTION);PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentIntent, 0);Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);PendingIntent deliverPI = PendingIntent.getBroadcast(this, 0, deliverIntent, 0);if (message.length() > 70) {ArrayList<String> msgs = sms.divideMessage(message);for (String msg : msgs) {sms.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);}} else {sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);}}
另外一种发送短信的接口:
protected void sendMessageByInterface2() {String phoneNumber = vSendNo.getText().toString().trim();String message = vSendContent.getText().toString().trim();SmsManager sms = SmsManager.getDefault();Intent sentIntent = new Intent(SENT_SMS_ACTION);PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentIntent, 0);Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);PendingIntent deliverPI = PendingIntent.getBroadcast(this, 0, deliverIntent, 0);if (message.length() > 70) { ArrayList<String> msgs = sms.divideMessage(message); ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();for(int i = 0;i<msgs.size();i++){ sentIntents.add(sentPI); } sms.sendMultipartTextMessage(phoneNumber, null, msgs, sentIntents, null); } else { sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI); } }
两种发送短信接口的区别在于,如果发送内容多余70字节。会发送长短信。
第一种方法发送短信,是将短信分割成多条短信,分别发给接收方。第二种方法是将短信内容一次性发给接收方。在接收方的短信列表中,显示的是一条短信,但是实际上还是按多条短信计费。
群发短信
for (int i = 0; i < contactList.size(); i++) { // contactList 发送人列表Intent itSend = new Intent(SENT_SMS_ACTION); // 自定义 Intent Action itSend.putExtra(KEY_PHONENUM, contactList.get(i)); // KEY_PHONENUM: 携带数据,收件人KEY 。PendingIntent mSendPI = PendingIntent.getBroadcast(getApplicationContext(), i , itSend, PendingIntent.FLAG_ONE_SHOT );//这里requestCode和flag的设置很重要,影响数据KEY_PHONENUM的传递。用循环I值作为了requestCode。String content = mContext.getString(R.string.test); // 短信内容smsManager.sendTextMessage(contactList.get(i), null, content, mSendPI, null); //smsManager 发送短信Manager}
根据联系人循环发送短信。注意定义PendingIntent的时候,注意 requestCode 和 Flags 。
源码
android发送短信的两种方式,发送长短信的两种方式,群发短信相关推荐
- android群发短信到通讯录所有联系人上并动态替换其中联系人信息
当我们要群发短信,而且需要替换里面的一些信息的时候(比如发送祝福短信,需要在短信里面加入对方姓名时), 做一个简单的群发短信的功能,并用通讯录里面的联系人姓名替换短信里面的#name#字符串,然后发送 ...
- Android群发短信草稿保存与发送机制
Android SDK中单条短信的目的地号码是存储在sms表中的addresses字段中的. Draft中的短信也是如此,但是有所例外. 如果你保存一条多地址的群发短信草稿时,Android的Mess ...
- android+发送短信的状态,Android--判断发送短信后的状态-发送成功Or发送失败.pdf
您所在位置:网站首页 > 海量文档  > 计算机 > 手机开发 Android--判断发送短信后的状态-发送成功Or发 ...
- Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...
- 移动云mas-sdk方式发送短信
移动云mas-sdk方式发送短信 https://mas.ecloud.10086.cn/ 因业务需要,发送短信的方式由http方式改为sdk,项目使用springboot 云mas账号 http原有 ...
- android群发短信时判断短信是否发送成功
先注册一个broadcast: private BroadcastReceiver smsBroadcastReceiver = new BroadcastReceiver() { public vo ...
- 企业群发短信时为什么要找短信平台公司而不是直接找运营商发送
对于初次有短信接口.短信通知.短信验证码等短信发送需求的用户来说,难免会有一个困惑,为什么发送短信时要找第三方短信平台公司/短信服务商,而不是直接找运营商呢? 一.首先我们要了解一下短信发送的路径: ...
- thinkphp6 短信宝/腾讯云发送手机号验证码
短信接口 场景:通常在使用手机号注册时需要发送短信验证码,在修改密码等敏感操作时也需要验证手机号发送短信验证码. 短信验证码的目的:验证用户的身份是否本人 在项目代码中发送短信,通常要调用第三方短信商 ...
- Android调用系统群发短信,vivo部分手机弹出“无效的地址”解决方法
Android调用系统群发短信,vivo部分手机弹出"无效的地址"解决方法 第一次写文章,来试试水 之前项目中有一个需求是获取通讯录联系人信息,并展示出来,然后可以选择一个或者多个 ...
最新文章
- AI在软硬件开发中的应用落地!
- 接口自动化(四)--数据依赖的处理
- 计算机vb选择题题题库,2013计算机二级VB真考选择题题库(4
- 制作镜像包时遇到的模块加载错误的问题
- valgrind 内存泄漏_应用 AddressSanitizer 发现程序内存错误
- 计组之存储系统:1、存储系统的概念与基本组成(层次、分类、性能指标、基本结构、寻址)
- What’s the difference between system.web and system.webServer?
- ajax post提交数据_第三十五天JavaScript中的ajax
- BlogEngine.Net架构与源代码分析系列索引贴
- 7.卷2(进程间通信)---互斥锁和条件变量
- 最全中华古诗词数据库,收录30多万诗词
- 图片复印如何去除黑底_我告诉你照片打印如何去除黑底
- word中图片转html失真,word中全部图片如何原样保存到本地保持不失真
- 大数据-经典案例手机号码分区
- 如何申请免费SSL证书?宝塔面板SSL证书安装部署完整教程
- 20172304 蓝墨云实验哈夫曼树
- 7、杂项:蓝牙beacon简述
- keras调试的正确打开方式: 一句话让你把tensorflow当pytorch用
- java基础(三):java面向对象OOP
- Linux下查看网络设备类型