Android彩信发送底层剖析:构建与传输过程详解

4星 · 超过85%的资源 需积分: 17 44 下载量 60 浏览量 更新于2024-09-17 收藏 84KB DOC 举报
本文将详细介绍Android平台上的彩信发送过程,重点剖析2.1版本中的关键代码段。在Android彩信发送流程中,用户按下发送按钮后,系统会通过`com.Android.mms.data.WorkingMessage.Java`类中的`send()`函数来实现。这个函数的主要任务是将图片、数据和文件等非文本内容适配到彩信格式,并通过网络发送。 首先,当用户触发发送操作时,`send()`函数会被调用。它会先进行日志记录(如果开启了verbose模式),这有助于开发者追踪和调试。然后,该方法进入实际的发送准备阶段,通过`prepareForSave(true/*notify*/)`调用,将彩信内容写入本地存储,并通知相关的状态变化。 在继续之前,系统需要获取接收者的列表,因为彩信通常涉及到多个联系人。接着,检查消息内容是否需要发送MMS(多媒体信息服务)而非短信。如果是MMS,程序会创建本地副本,因为发送操作将在后台线程执行,以避免阻塞主线程的其他操作。 关键代码部分提到的`finalUrimmsUri=mMessageUri;`表示会为彩信创建一个URI,用于标识存储的多媒体数据。而`finalPduPersister persister = PduPersister.getPduPersister(mContext)`这一行则是获取一个PDU(Protocol Data Unit)持久化对象,用于管理和存储彩信的二进制数据,包括图片、音频或视频等非文本内容。 在打包过程中,PduPersister会根据MMS协议的要求对这些数据进行编码和压缩,将其转换成适合通过移动网络传输的格式。这通常涉及到封装成PDU格式,一种基于七号信令系统的数据包格式,支持多媒体信息的传输。 最后,`send()`函数会将所有必要的信息和数据组合成一个完整的彩信请求,并调用`onMessageSent()`回调,通知用户消息已经成功发送到手机堆栈。至此,彩信的发送过程完成,但`WorkingMessage`对象在此刻已不再使用。 总结来说,Android彩信发送涉及了后台线程的异步操作,对内容进行本地备份和编码处理,以及与手机通信系统的交互。通过理解`send()`函数及其相关的代码,开发者可以深入理解彩信如何在Android设备上被创建、存储和最终通过网络发送给收件人。