android.telephony.SmsManager.sendMultipartTextMessage
smsManager.sendMultipartTextMessage(destAddress, null, divideContents, sentIntents, null);
next step --
android.telephony.SmsManager
public void sendMultipartTextMessage(    
        String destinationAddress, String scAddress, ArrayList<String> parts,    
        ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) {    
    if (TextUtils.isEmpty(destinationAddress)) {    
        throw new IllegalArgumentException("Invalid destinationAddress");    
    }    
    if (parts == null || parts.size() < 1) {    
        throw new IllegalArgumentException("Invalid message body");    
    }
    if (parts.size() > 1) {   
        try {    
            ISms iccISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));    
            if (iccISms != null) {    
                iccISms.sendMultipartText(destinationAddress, scAddress, parts,    
                        sentIntents, deliveryIntents);    
            }    
        } catch (RemoteException ex) {    
            // ignore it    
        }    
    } else {    
        PendingIntent sentIntent = null;    
        PendingIntent deliveryIntent = null;    
        if (sentIntents != null && sentIntents.size() > 0) {    
            sentIntent = sentIntents.get(0);    
        }    
        if (deliveryIntents != null && deliveryIntents.size() > 0) {    
            deliveryIntent = deliveryIntents.get(0);    
        }    
        sendTextMessage(destinationAddress, scAddress, parts.get(0),    
                sentIntent, deliveryIntent);    
    }    
}
next step --
com.android.internal.telephony.IccSmsInterfaceManager
public void sendMultipartText(String destAddr, String scAddr, List<String> parts,    
        List<PendingIntent> sentIntents, List<PendingIntent> deliveryIntents) {    
    mPhone.getContext().enforceCallingPermission(    
            "android.permission.SEND_SMS",    
            "Sending SMS message");    
    if (Log.isLoggable("SMS", Log.VERBOSE)) {    
        int i = 0;    
        for (String part : parts) {    
            log("sendMultipartText: destAddr=" + destAddr + ", srAddr=" + scAddr +    
                    ", part[" + (i++) + "]=" + part);    
        }    
    }    
    mDispatcher.sendMultipartText(destAddr, scAddr, (ArrayList<String>) parts,    
            (ArrayList<PendingIntent>) sentIntents, (ArrayList<PendingIntent>) deliveryIntents);    
}
next step --
com.android.internal.telephony.SmsDispatcher
protected void sendMultipartText(String destAddr, String scAddr,    
        ArrayList<String> parts, ArrayList<PendingIntent> sentIntents,    
        ArrayList<PendingIntent> deliveryIntents) {
    int refNumber = getNextConcatenatedRef() & 0x00FF;   
    int msgCount = parts.size();    
    int encoding = android.telephony.SmsMessage.ENCODING_UNKNOWN;
mRemainingMessages = msgCount;
    TextEncodingDetails[] encodingForParts = new TextEncodingDetails[msgCount];   
    for (int i = 0; i < msgCount; i++) {    
        TextEncodingDetails details = calculateLength(parts.get(i), false);    
        if (encoding != details.codeUnitSize    
                && (encoding == android.telephony.SmsMessage.ENCODING_UNKNOWN    
                        || encoding == android.telephony.SmsMessage.ENCODING_7BIT)) {    
            encoding = details.codeUnitSize;    
        }    
        encodingForParts[i] = details;    
    }
    for (int i = 0; i < msgCount; i++) {   
        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();    
        concatRef.refNumber = refNumber;    
        concatRef.seqNumber = i + 1;  // 1-based sequence    
        concatRef.msgCount = msgCount;    
        // TODO: We currently set this to true since our messaging app will never    
        // send more than 255 parts (it converts the message to MMS well before that).    
        // However, we should support 3rd party messaging apps that might need 16-bit    
        // references    
        // Note:  It's not sufficient to just flip this bit to true; it will have    
        // ripple effects (several calculations assume 8-bit ref).    
        concatRef.isEightBits = true;    
        SmsHeader smsHeader = new SmsHeader();    
        smsHeader.concatRef = concatRef;
        // Set the national language tables for 3GPP 7-bit encoding, if enabled.   
        if (encoding == android.telephony.SmsMessage.ENCODING_7BIT) {    
            smsHeader.languageTable = encodingForParts[i].languageTable;    
            smsHeader.languageShiftTable = encodingForParts[i].languageShiftTable;    
        }
        PendingIntent sentIntent = null;   
        if (sentIntents != null && sentIntents.size() > i) {    
            sentIntent = sentIntents.get(i);    
        }
        PendingIntent deliveryIntent = null;   
        if (deliveryIntents != null && deliveryIntents.size() > i) {    
            deliveryIntent = deliveryIntents.get(i);    
        }
        sendNewSubmitPdu(destAddr, scAddr, parts.get(i), smsHeader, encoding,   
                sentIntent, deliveryIntent, (i == (msgCount - 1)));    
    }
}
protected abstract void sendNewSubmitPdu(String destinationAddress, String scAddress,    
        String message, SmsHeader smsHeader, int encoding,    
        PendingIntent sentIntent, PendingIntent deliveryIntent, boolean lastPart);
android.telephony.SmsManager.sendMultipartTextMessage的更多相关文章
- android.telephony.SmsManager 短信笔记
		
android 几种发送短信的方法 http://www.oschina.net/question/163910_27409 <uses-permission android:name=&quo ...
 - Android Telephony分析(七) ---- 接口扩展(异步转同步)
		
本文是基于上一篇<Android Telephony分析(六) —- 接口扩展(实践篇)>来写的.上一篇介绍的接口扩展的方法需要实现两部分代码:1. 从APP至RIL,发送请求:2. 从R ...
 - Android Telephony分析(六) ---- 接口扩展(实践篇)
		
本文将结合前面五篇文章所讲解的知识,综合起来,实现一个接口扩展的功能.如果还没有阅读过前面五篇文章的内容,请先阅读:<Android Telephony分析(一) — Phone详解 >& ...
 - Android Telephony分析(五) ---- TelephonyRegistry详解
		
本文紧接着上一篇文章<Android Telephony分析(四) —- TelephonyManager详解 >的1.4小节.从TelephonyRegistry的大部分方法中: 可以看 ...
 - Android Telephony分析(四) ---- TelephonyManager详解
		
前言 TelephonyManager主要提供Telephony相关信息的查询/修改功能,以及Phone状态监听功能,封装的方法主要是提供给APP上层使用.TelephonyManager.java ...
 - Android Telephony分析(三) ---- RILJ详解
		
前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\andro ...
 - Android Telephony分析(二) ---- RegistrantList详解
		
前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程.在Telephony模块中,在RIL.Tracker(ServiceStateTrac ...
 - Android Telephony —— 手机信号实时变化源码分析过程记录
		
源码版本:4.4 跳过InCallActivity等UI实现.先看service以及底层. 1, 在frameworks/opt下面会发现如下文件列表: ./telephony/src/java/co ...
 - Android Telephony分析(一) ---- Phone详解
		
目录: Phone的继承关系与PhoneFactory(GsmCdmaPhone.ImsPhone.SipPhone) Phone进程的启动 Phone对象的初始化(DefaultPhoneNotif ...
 
随机推荐
- secureCRT在Windows上面的安装过程
			
参考这篇文章: https://www.cnblogs.com/yjd_hycf_space/p/7729796.html
 - ajax file upload 修改
			
先前 写过 JS 判断上传 文件 大小 后来发现一个问题, 就是单页面运行 js 没有问题, 但是基础呢个到项目中 有些时候 obj_img.dynsrc = file.value; 报错说没有 权限 ...
 - linux服务器上面部署ShowDoc  安装Composer
			
1.安装Composer Composer 是 PHP 的一个依赖管理工具,功能上类似于Java 的 Maven,Python 的 pip,Ruby的 gem,Nodejs 的 npm.详细介绍可参考 ...
 - Kendall's tau-b(肯德尔)等级相关系数
			
Kendall's tau-b(肯德尔)等级相关系数:用于反映分类变量相关性的指标,适用于两个分类变量均为有序分类的情况.对相关的有序变量进行非参数相关检验:取值范围在-1-1之间,此检验适合于正方形 ...
 - Axure-Axure RP For Chrome 演示扩展
			
Axure RP生成的Html原型,其中包含JS文件,在本地进行演示时浏览器IE会弹出安全提醒.谷歌浏览器Chrome则需要在线安装一个Axure的扩展工具才可以演示. Axure RP Extens ...
 - 以sb7code为基础创建一个基本的OpenGL项目
			
以sb7code为基础创建一个基本的OpenGL项目 从github上面下载sb7code代码: https://github.com/openglsuperbible/sb7code 打开H ...
 - mysql 批量数据循环插入
			
双重循环插入 DELIMITER ;; CREATE PROCEDURE test_insert() BEGIN DECLARE a INT DEFAULT 1; DECLARE b TINYINT ...
 - Asp.net MVC利用WebUploader上传大文件出现404解决办法。
			
刚开始我上传小文件都是比较顺利的,但是上传了一个大文件大约有200M的压缩包就不行了.在chrome里面监视发现网络状态是404,我分析可能不是WebUploader的限制,应该是WebConfig限 ...
 - 【Python】torrentParser1.02
			
#------------------------------------------------------------------------------------ # torrentParse ...
 - 在CentOS 7上安装Kafka
			
简介 Kafka 是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理消息等,同时具有更高的吞吐率,支持分区.多副本.冗余,因此被广泛用于大规模消息数据处理应用. ...