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发送短信的两种方式,发送长短信的两种方式,群发短信相关推荐

  1. android群发短信到通讯录所有联系人上并动态替换其中联系人信息

    当我们要群发短信,而且需要替换里面的一些信息的时候(比如发送祝福短信,需要在短信里面加入对方姓名时), 做一个简单的群发短信的功能,并用通讯录里面的联系人姓名替换短信里面的#name#字符串,然后发送 ...

  2. Android群发短信草稿保存与发送机制

    Android SDK中单条短信的目的地号码是存储在sms表中的addresses字段中的. Draft中的短信也是如此,但是有所例外. 如果你保存一条多地址的群发短信草稿时,Android的Mess ...

  3. android+发送短信的状态,Android--判断发送短信后的状态-发送成功Or发送失败.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp手机开发 Android--判断发送短信后的状态-发送成功Or发 ...

  4. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...

  5. 移动云mas-sdk方式发送短信

    移动云mas-sdk方式发送短信 https://mas.ecloud.10086.cn/ 因业务需要,发送短信的方式由http方式改为sdk,项目使用springboot 云mas账号 http原有 ...

  6. android群发短信时判断短信是否发送成功

    先注册一个broadcast: private BroadcastReceiver smsBroadcastReceiver = new BroadcastReceiver() { public vo ...

  7. 企业群发短信时为什么要找短信平台公司而不是直接找运营商发送

    对于初次有短信接口.短信通知.短信验证码等短信发送需求的用户来说,难免会有一个困惑,为什么发送短信时要找第三方短信平台公司/短信服务商,而不是直接找运营商呢? 一.首先我们要了解一下短信发送的路径: ...

  8. thinkphp6 短信宝/腾讯云发送手机号验证码

    短信接口 场景:通常在使用手机号注册时需要发送短信验证码,在修改密码等敏感操作时也需要验证手机号发送短信验证码. 短信验证码的目的:验证用户的身份是否本人 在项目代码中发送短信,通常要调用第三方短信商 ...

  9. Android调用系统群发短信,vivo部分手机弹出“无效的地址”解决方法

    Android调用系统群发短信,vivo部分手机弹出"无效的地址"解决方法 第一次写文章,来试试水 之前项目中有一个需求是获取通讯录联系人信息,并展示出来,然后可以选择一个或者多个 ...

最新文章

  1. AI在软硬件开发中的应用落地!
  2. 接口自动化(四)--数据依赖的处理
  3. 计算机vb选择题题题库,2013计算机二级VB真考选择题题库(4
  4. 制作镜像包时遇到的模块加载错误的问题
  5. valgrind 内存泄漏_应用 AddressSanitizer 发现程序内存错误
  6. 计组之存储系统:1、存储系统的概念与基本组成(层次、分类、性能指标、基本结构、寻址)
  7. What’s the difference between system.web and system.webServer?
  8. ajax post提交数据_第三十五天JavaScript中的ajax
  9. BlogEngine.Net架构与源代码分析系列索引贴
  10. 7.卷2(进程间通信)---互斥锁和条件变量
  11. 最全中华古诗词数据库,收录30多万诗词
  12. 图片复印如何去除黑底_我告诉你照片打印如何去除黑底
  13. word中图片转html失真,word中全部图片如何原样保存到本地保持不失真
  14. 大数据-经典案例手机号码分区
  15. 如何申请免费SSL证书?宝塔面板SSL证书安装部署完整教程
  16. 20172304 蓝墨云实验哈夫曼树
  17. 7、杂项:蓝牙beacon简述
  18. keras调试的正确打开方式: 一句话让你把tensorflow当pytorch用
  19. java基础(三):java面向对象OOP
  20. Linux下查看网络设备类型

热门文章

  1. Linux 卸载程序
  2. lpc1768的gpio库函数_LPC1768之GPIO输入和输出配置基础例程
  3. Linux进程通信的试验
  4. C#--解方程组之Jacobi迭代法
  5. 检测号码是否开通微信如何做?
  6. 用户行为分析系统架构
  7. jadx反编译程序未响应
  8. Python实现绘制函数图像——以Sigmoid函数为例
  9. C语言初阶:进制,计算机的美丽语言
  10. Mybatis+spring知识点