iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android发送短信方法总结
  • 282
分享到

Android发送短信方法总结

方法Android 2022-06-06 06:06:29 282人浏览 泡泡鱼
摘要

Android api 中提供了SmsManager类处理短信。其中的sendTextMessage(num, null, content, pend, null)函数就是发送

Android api 中提供了SmsManager类处理短信。其中的sendTextMessage(num, null, content, pend, null)函数就是发送,具体介绍如下:

SMS涉及的主要类SmsManager

实现SMS主要用到SmsManager类,该类继承自java.lang.Object类,下面我们介绍一下该类的主要成员。
公有方法:

1、ArrayList<String> divideMessage(String text)

当短信超过SMS消息的最大长度时,将短信分割为几块。
参数:text——初始的消息,不能为空
返回值:有序的ArrayList<String>,可以重新组合为初始的消息

2、static SmsManager getDefault()

获取SmsManager的默认实例。
返回值:SmsManager的默认实例

3、void SendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data,PendingIntent sentIntent, PendingIntent deliveryIntent)

发送一个基于SMS的数据到指定的应用程序端口。
参数:
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就广播。
异常:如果destinationAddress或data是空时,抛出IllegalArgumentException异常。

4、void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts,ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent>  deliverIntents)

发送一个基于SMS的多部分文本,调用者应用已经通过调用divideMessage(String text)将消息分割成正确的大小。

参数:

1)、destinationAddress——消息的目标地址

2)、scAddress——服务中心的地址or为空使用当前默认的SMSC

3)、parts——有序的ArrayList<String>,可以重新组合为初始的消息

4)、sentIntents——跟SendDataMessage方法中一样,只不过这里的是一组PendingIntent

5)、deliverIntents——跟SendDataMessage方法中一样,只不过这里的是一组PendingIntent
异常:如果destinationAddress或data是空时,抛出IllegalArgumentException异常。

5、void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent,PendingIntent deliveryIntent)

发送一个基于SMS的文本。参数的意义和异常前面的已存在的一样,不再累述。

常量:

public static final int RESULT_ERROR_GENERIC_FAILURE   表示普通错误,值为1(0x00000001) public static final int RESULT_ERROR_NO_SERVICE    表示服务当前不可用,值为4 (0x00000004) public static final int RESULT_ERROR_NULL_PDU   表示没有提供pdu,值为3 (0x00000003) public static final int RESULT_ERROR_RADIO_OFF   表示无线广播被明确地关闭,值为2 (0x00000002) public static final int STATUS_ON_ICC_FREE    表示自由空间,值为0 (0x00000000) public static final int STATUS_ON_ICC_READ  表示接收且已读,值为1 (0x00000001) public static final int STATUS_ON_ICC_SENT   表示存储且已发送,值为5 (0x00000005) public static final int STATUS_ON_ICC_UNREAD  表示接收但未读,值为3 (0x00000003) public static final int STATUS_ON_ICC_UNSENT  表示存储但为发送,值为7 (0x00000007)

 第一:调用系统短信接口直接发送短信;主要代码如下:


 
  public void sendSMS(String phoneNumber, String message) {
    // 获取短信管理器
    android.telephony.SmsManager smsManager = android.telephony.SmsManager
        .getDefault();
    // 拆分短信内容(手机短信长度限制)
    List<String> divideContents = smsManager.divideMessage(message);
    for (String text : divideContents) {
      smsManager.sendTextMessage(phoneNumber, null, text, sentPI,
          deliverPI);
    }
  }

第二:调起系统发短信功能;主要代码如下:


 
  public void doSendSMSTo(String phoneNumber,String message){
    if(PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)){
      Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber));     
      intent.putExtra("sms_body", message);     
      startActivity(intent);
    }
  }

下面来主要讲解第一种方法,第一种方法可以监控发送状态和对方接收状态使用的比较多。

 处理返回的状态代码如下:


//处理返回的发送状态 
    String SENT_SMS_ACTION = "SENT_SMS_ACTION";
    Intent sentIntent = new Intent(SENT_SMS_ACTION);
    sentPI= PendingIntent.getBroadcast(this, 0, sentIntent,
        0);
    // reGISter the Broadcast Receivers
    this.registerReceiver(new BroadcastReceiver() {
      @Override
      public void onReceive(Context _context, Intent _intent) {
        switch (getResultCode()) {
        case Activity.RESULT_OK:
          Toast.makeText(MainActivity.this,
        "短信发送成功", 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;
        }
      }
    }, new IntentFilter(SENT_SMS_ACTION));
    //处理返回的接收状态 
    String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
    // create the deilverIntent parameter
    Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);
    deliverPI = PendingIntent.getBroadcast(this, 0,
        deliverIntent, 0);
    this.registerReceiver(new BroadcastReceiver() {
      @Override
      public void onReceive(Context _context, Intent _intent) {
        Toast.makeText(MainActivity.this,
     "收信人已经成功接收", Toast.LENGTH_SHORT)
     .show();
      }
    }, new IntentFilter(DELIVERED_SMS_ACTION));

以下是对以上代码的封装

1、短信的发送


import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.telephony.SmsManager;
import java.util.ArrayList;
import java.util.List;

public class SMSMethod {
  private static SMSMethod mSMSmsMethod;
  
  public static String SMS_SEND_ACTIOIN = "SMS_SEND_ACTIOIN";
  public static String SMS_DELIVERED_ACTION = "SMS_DELIVERED_ACTION";
  
  private SMSReceiver mSendSMSReceiver, mDeliveredSMSReceiver;
  private Context mContext;
  private SMSMethod(Context context){
    mContext=context;
    registerReceiver();
  }
  public static SMSMethod getInstance(Context context){
    if (mSMSmsMethod==null){
      synchronized (SMSMethod.class){
        if (mSMSmsMethod==null){
          mSMSmsMethod=new SMSMethod(context);
        }
      }
    }
    return mSMSmsMethod;
  }
  
  public void registerReceiver(){
     
    IntentFilter mFilter01;
    mFilter01 = new IntentFilter(SMS_SEND_ACTIOIN);
    mSendSMSReceiver = new SMSReceiver();
    mContext.registerReceiver(mSendSMSReceiver, mFilter01);
    
    mFilter01 = new IntentFilter(SMS_DELIVERED_ACTION);
    mDeliveredSMSReceiver = new SMSReceiver();
    mContext.registerReceiver(mDeliveredSMSReceiver, mFilter01);
  }
  public void unregisterReceiver(){
    
    if (mSendSMSReceiver!=null){
      mContext.unregisterReceiver(mSendSMSReceiver);
    }
    if (mDeliveredSMSReceiver!=null) {
      mContext.unregisterReceiver(mDeliveredSMSReceiver);
    }
  }
  public void SendMessage(String strDestAddress,String strMessage){
    
    SmsManager smsManager = SmsManager.getDefault();
    try {
     
      Intent itSend = new Intent(SMS_SEND_ACTIOIN);
      Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);
     
      PendingIntent mSendPI = PendingIntent.getBroadcast(mContext, 0, itSend, 0);
     
      PendingIntent mDeliverPI = PendingIntent.getBroadcast(mContext, 0, itDeliver, 0);
      List<String> divideContents = smsManager.divideMessage(strMessage);
      for (String text:divideContents) {
         
        smsManager.sendTextMessage(strDestAddress, null, text, mSendPI, mDeliverPI);
      }
    }catch(Exception e) {
      e.printStackTrace();
    }
  }
  public void SendMessage2(String strDestAddress,String strMessage){
    ArrayList<PendingIntent> sentPendingIntents = new ArrayList<PendingIntent>();
    ArrayList<PendingIntent> deliveredPendingIntents = new ArrayList<PendingIntent>();
    
    SmsManager smsManager = SmsManager.getDefault();
    try {
     
      Intent itSend = new Intent(SMS_SEND_ACTIOIN);
      Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);
     
      PendingIntent mSendPI = PendingIntent.getBroadcast(mContext, 0, itSend, 0);
     
      PendingIntent mDeliverPI = PendingIntent.getBroadcast(mContext, 0, itDeliver, 0);
      ArrayList<String> mSMSMessage = smsManager.divideMessage(strMessage);
      for (int i = 0; i < mSMSMessage.size(); i++) {
        sentPendingIntents.add(i, mSendPI);
        deliveredPendingIntents.add(i, mDeliverPI);
      }
       
      smsManager.sendMultipartTextMessage(strDestAddress,null,mSMSMessage ,sentPendingIntents,deliveredPendingIntents);
    }catch(Exception e) {
      e.printStackTrace();
    }
  }
}

2、短信发送状态的监听


package com.javen.sms.receiver;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver{
  @Override
  public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(SMSMethod.SMS_SEND_ACTIOIN)){
      try{
        
        //Retrieve the current result code, as set by the previous receiver.
        switch (getResultCode()){
          case Activity.RESULT_OK:
            System.out.println("短信发送成功");
            Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT).show();
            break;
          case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
            System.out.println("短信发送失败");
            Toast.makeText(context, "短信发送失败", Toast.LENGTH_SHORT).show();
            break;
          case SmsManager.RESULT_ERROR_RADIO_OFF:
            break;
          case SmsManager.RESULT_ERROR_NULL_PDU:
            break;
        }
      }catch (Exception e){
        e.printStackTrace();
      }
    } else if(intent.getAction().equals(SMSMethod.SMS_DELIVERED_ACTION)){
      
      switch(getResultCode()){
        case Activity.RESULT_OK:
          System.out.println("短信已送达");
          Toast.makeText(context, "短信已送达", Toast.LENGTH_SHORT).show();
          break;
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
          System.out.println("短信未送达");
          
          Toast.makeText(context, "短信未送达", Toast.LENGTH_SHORT).show();
          break;
        case SmsManager.RESULT_ERROR_RADIO_OFF:
          break;
        case SmsManager.RESULT_ERROR_NULL_PDU:
          break;
      }
    }
  }
}

测试代码:


public void sendTextMessage(View view){
    SMSMethod.getInstance(this).SendMessage("xxxx","测试短信。。。");
  }
  public void sendMultipartTextMessage(View view){
    SMSMethod.getInstance(this).SendMessage2("xxxx", "测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。测试短信wwww。。。");
  }
  @Override
  protected void onPause() {
    SMSMethod.getInstance(this).unregisterReceiver();
    super.onPause();
  }

别忘了权限的问题:


<uses-permission android:name="android.permission.SEND_SMS" /> 

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

您可能感兴趣的文章:Android发送短信功能代码Android实现发送短信功能实例详解Android开发中实现发送短信的小程序示例Android发送短信方法实例详解Android接收和发送短信处理Android接收和发送短信的实现代码Android如何实现接收和发送短信


--结束END--

本文标题: Android发送短信方法总结

本文链接: https://www.lsjlt.com/news/23407.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python发送短信
    import http.clientimport urllib host = "106.ihuyi.com"sms_send_uri = "/webservice/sms.phpmethod=Submit" account =...
    99+
    2023-01-31
    发送短信 python
  • 免费发送短信
    大家好,今天给大家介绍一个可以免费发送短信的方法,喜欢记得点赞、一定要收藏 目录 介绍兼容性和适配 SDK/插件;使用代码使用代码pythonPHPZKey SDK/插件python...
    99+
    2023-09-15
    python php javascript
  • 怎么在Android中利用SmsManager发送短信
    本篇文章给大家分享的是有关怎么在Android中利用SmsManager发送短信,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。关键代码实现package com.ex...
    99+
    2023-05-30
    android smsmanager
  • 怎么在Android中调用发送的短信
    怎么在Android中调用发送的短信?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。功能:调用发送短信功能1 、 权限 <uses-permission an...
    99+
    2023-05-30
    android
  • php如何发送短信
    今天小编给大家分享一下php如何发送短信的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。发送方法:1、实名认证并开通短信API...
    99+
    2023-07-04
  • Java实现短信发送
    首先,我们要实现Java短信发送功能需要去申请第三方短信接口,以阿里云为例 点击跳转 在API市场中找到短信验证码接口: 我们可以先选择免费试用来测试: 点击立即购买后可前往控制台查看: OK...
    99+
    2023-09-07
    java 开发语言
  • springboot整合RabbitMQ发送短信的实现方法
    这篇文章主要介绍springboot整合RabbitMQ发送短信的实现方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!RabbitMQ安装和运行# 安装rpm -ivh erlang-...
    99+
    2023-06-15
  • php怎么发送短信
    本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑基于PHP的短信API接口调用示例...
    99+
    2024-04-02
  • PHP实现手机短信接口发送短信
    随着互联网的普及,短信已经成为人们日常生活中不可或缺的一部分。我们在各种场合下都会使用到短信,例如注册账号、确认订单、找回密码、验证码验证等等。其中,短信验证码验证是目前最常用的方式之一。而在实现短信验证码验证的过程中,短信发送接口的实现显...
    99+
    2023-05-22
    接口 PHP 手机短信
  • PHP调用乐信短信接口实现短信发送
    近年来,短信作为一种高效快捷的通信手段,被广泛地应用于各种场景,比如验证码验证、营销推广、订单通知等。而乐信短信平台作为国内领先的短信服务提供商,其稳定可靠的服务受到了广大客户的信任和好评。本文将介绍如何利用 PHP 编程语言,调用乐信短信...
    99+
    2023-05-21
    PHP 调用 短信接口
  • PHP调用鼎信通短信接口实现短信发送
    近年来,随着移动互联网的发展,短信成为了人们交流的一种重要工具。而如何实现短信的快速发送,对于企业来说则尤为重要。本文将介绍如何使用PHP语言调用鼎信通短信接口实现短信的自动发送。一、注册鼎信通账户并获取API接口密钥在使用鼎信通短信接口之...
    99+
    2023-05-21
    PHP 短信发送 鼎信通短信接口
  • PHP调用企信通短信接口实现短信发送
    企信通是目前国内最大的企业级短信服务提供商之一,其短信接口简单易用,为广大企业用户所喜爱。本文将介绍如何使用PHP调用企信通短信接口实现短信发送。一、申请企业短信接口账号首先,我们需要在企信通官网上申请企业短信接口账号。根据官网提示填写相关...
    99+
    2023-05-22
    PHP 短信发送 企信通
  • PHP发送短信技术详解
    一、简介随着移动互联网的普及,短信营销越来越受到企业的关注和重视。作为一种实效性极高、成本极低、传递速度极快的宣传方式,短信营销正逐渐成为企业推销新品、掌握市场新变化的重要手段之一。PHP作为一种强大的后端语言,也可以实现短信发送的功能。本...
    99+
    2023-05-21
    PHP 发送短信 技术详解
  • 阿里云平台发送短信
    1.获取阿里云访问密钥 为了使用短信发送API-Python SDK,您必须申请阿里云的访问密钥。 阿里云访问秘钥是阿里云为用户使用 API(非控制台)来访问其云资源设计的“安全口令”。您可以用它来签名 API 请求内容以通过服务端的安全...
    99+
    2023-01-31
    阿里 发送短信 平台
  • 只能利用VBS发送短信
    这篇文章主要介绍了只能利用VBS发送短信,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:m = "xxxyyyyzzzz" '手机号码 p...
    99+
    2023-06-08
  • Java怎么实现短信发送
    本篇内容主要讲解“Java怎么实现短信发送”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么实现短信发送”吧!1. 引入相关maven依赖<dependency><gr...
    99+
    2023-06-22
  • PHP发送HTTP请求实现批量短信发送
    PHP是一种流行的网页编程语言,用于开发动态Web应用程序。与其他编程语言相比,PHP与HTTP请求的集成较好,使其成为发送批量短信的理想语言。在本文中,我们将介绍如何使用PHP发送HTTP请求来实现批量短信发送。假设我们有一个来自电信服务...
    99+
    2023-05-24
    Http请求 PHP 短信发送
  • SpringBoot怎么实现短信发送
    这篇“SpringBoot怎么实现短信发送”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎么实现短信发送...
    99+
    2023-06-29
  • PHP实现发送短信验证码的方法是什么
    本篇内容主要讲解“PHP实现发送短信验证码的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP实现发送短信验证码的方法是什么”吧!创建好HTML和js文件。创建“Msm.php”文件...
    99+
    2023-06-25
  • Python调用腾讯云短信服务发送手机短信
    目录1、准备工作2、代码实现3、拓展4、闲聊1、准备工作 pip install qcloudsms_py 1.注册腾讯云账号 2.在产品列表内找到短信,在短信内添加应用 3.获取...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作