android发送短信,以及接收报告和发送报告

android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下:

一、调起系统发短信功能

代码如下:

/**     * 调起系统发短信功能     * @param phoneNumber 发送短信的接收号码     * @param message     短信内容     */    public void SendSMS(String phoneNumber,String message){            Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber));                      intent.putExtra("sms_body", message);                      startActivity(intent);    }

二、调用系统短信接口直接发送短信

首先先介绍一下,发送短信相关的api,主要依靠的是

  sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)     destinationAddress      发送短信的地址(也就是号码)      scAddress               短信服务中心,如果为null,就是用当前默认的短信服务中心      text                    短信内容      sentIntent              如果不为null,当短信发送成功或者失败时,这个PendingIntent会被广播出去成功的结果代码是Activity.RESULT_OK,或者下面这些错误之一  :RESULT_ERROR_GENERIC_FAILURE,RESULT_ERROR_RADIO_OFF,RESULT_ERROR_NULL_PDU等                                           通俗点说: 发送 -->中国移动 --> 中国移动发送失败 --> 返回发送成功或失败信号 --> 后续处理   即,这个意图包装了短信发送状态的信息                                 deliveryIntent          如果不为null,当这个短信发送到接收者那里,这个PendtingIntent会被广播,状态报告生成的pdu(指对等层次之间传递的数据单位)会拓展到数据("pdu")                                       通俗点就是:发送 -->中国电信 --> 中国电信发送成功 --> 返回对方是否收到这个信息 --> 后续处理  即:这个意图包装了短信是否被对方收到的状态信息(供应商已经发送成功,但是对方没有收到)。

正式开始操作

1.首先要添加权限!

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

2.发送短信的核心代码:

(1)如果你不需要发送报告,那么直接使用:

/**     * 直接调用短信接口发短信,不含发送报告和接受报告     *      * @param phoneNumber     * @param message     */    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, null, null);        }    }

(2)如果你需要发送报告和接收报告,那么我们开始:

我们先定义两个接受方法,用作接收发送报告以及接收报告

发送报告

//处理返回的发送状态 String SENT_SMS_ACTION = "SENT_SMS_ACTION";Intent sentIntent = new Intent(SENT_SMS_ACTION);PendingIntent sendIntent= PendingIntent.getBroadcast(context, 0, sentIntent,        0);// register the Broadcast Receiverscontext.registerReceiver(new BroadcastReceiver() {    @Override    public void onReceive(Context _context, Intent _intent) {        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;        }    }}, new IntentFilter(SENT_SMS_ACTION));

接收报告

//处理返回的接收状态 String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";// create the deilverIntent parameterIntent deliverIntent = new Intent(DELIVERED_SMS_ACTION);PendingIntent backIntent= 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));

发送短信代码:

/**     * 调用短信接口发短信,含接收报告和发送报告     *      * @param phoneNumber     * @param message     */    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, sendIntent, backIntent);        }    }

更多相关文章

  1. Android应用程序注册广播接收器(registerReceiver)的过程分析
  2. Android与Arduino的USB通讯实验(1)
  3. Android--socket 发送广播的那些坑
  4. 2014 年 Android(安卓)碎片化报告
  5. Android应用程序注册广播接收器(registerReceiver)的过程分析
  6. Android短信发送器的实现
  7. Android应用程序注册广播接收器(registerReceiver)的过程分析
  8. Android(安卓)广播机制
  9. Android实时获得经纬度,发送给c++服务端

随机推荐

  1. Android APK 文件自动安装
  2. androidd 几个开源框架
  3. Android截屏及图片解析
  4. 实例教程四:采用Pull解析器解析和生成XML
  5. android 相机 前后摄像头判断
  6. Android JNI学习笔记——so文件动态加载
  7. android.inputmethodservice.KeyboardVie
  8. 2.在服务器上使用 gradle 打包 android
  9. Android(安卓)中 AlertDialog 的多种创建
  10. Android技术文章收集