简单掌握Android开发中彩信的发送接收及其附件的处理

作者:时之沙 时间:2023-04-18 02:32:24 

一. 彩信发送:
  彩信比短信麻烦很多。从sendMmsWorker函数的参数就可以看出来:(conv, mmsUri, persister, slideshow, sendReq) 上下文,uri,PduPersister(彩信是用pdu的),slideshow 包含了所有的彩信信息,sendreq包含了mime封装mms时的headers,也包括了from,to等信息 。
(1)函数 sendMmsWorker: 


private void sendMmsWorker(Conversation conv, Uri mmsUri,  

PduPersister persister, SlideshowModel slideshow, SendReq sendReq) {

.....

}

     前面挺长一段代码,检查这个对话(conversation)之前还有没有未发送的信息。需要提到一下MessageStatusListener,这个Interface接口定义在WorkingMessage.java里,而实现是在ComposeMessageActivity.java中,所以前者在一些状态改变的时候可以很方便的调用后者的一些函数作相应的改动。MessageStatusListener中主要包括:    onProtocolChanged彩信短信互切换,onAttachmentChanged附件改变,onPreMessageSent发消息前,onMessageSent发消息后。这里调用了onPreMessageSent这个监听函数, 然后ComposeMessageActivity 就会调用resetMessage函数 ,这个函数会调整显示,focus,软键盘等。
     检查mmsUri。如果这个uri是空的话,直接造一个新的uri继续发送。这个createDraftMmsMessage(persister, sendReq, slideshow);函数可以包含所有发送需要的信息, 如果uri不为空,调用的是updateDraftMmsMessage(mmsUri, persister, slideshow, sendReq); 总之功能是把这个将发送的mms,存disk了,也就是存draft了。
    deleteDraftSmsMessage 删除草稿 。
     创建一个MmsMessageSender,用这个sender来调用sendMessage函数。
     如果函数返回值表示刚刚发送出去的其实是一个短信sms,而已。于是要把数据库里存着的draft删掉。
    调用onMessageSent这个监听函数,调用ComposeMessageActivity的onMessageSent,这个函数功能是重新显示conversationList。
(2)createDraftMmsMessage(persister, sendReq, slideshow); 和 updateDraftMmsMessage(mmsUri, persister, slideshow, sendReq); 这两个函数从本质上讲是一样的,把附件的东西以pdubody的形式存下来,另外就是更新uri。
3)MmsMessageSender.java类,在mms/transaction下面,实现了MessageSender接口,这个接口sendMessage并返回boolean的值。若发送的是mms,返回true。若发送的是sms,返回false。

单卡手机彩信发送的时序图如图所示

简单掌握Android开发中彩信的发送接收及其附件的处理

双卡手机彩信发送的时序图如图1.5所示:

简单掌握Android开发中彩信的发送接收及其附件的处理

二.彩信接收
彩信接收的时序图如图1.3所示:

简单掌握Android开发中彩信的发送接收及其附件的处理

三、接收Wappush信息及彩信附件增加删除
1..Wappush接收的时序图如图所示:

简单掌握Android开发中彩信的发送接收及其附件的处理

2.彩信附件增加删除
彩信附件添加:在ComposeMessageActivity里的addAttachment(int type) 函数 根据type的不同,分成7个case 

  • MediaSelectListActivity.ADD_IMAGE

  • MediaSelectListActivity.TAKE_PICTURE

  • MediaSelectListActivity.ADD_VIDEO

  • MediaSelectListActivity.RECORD_VIDEO

  • MediaSelectListActivity.ADD_SOUND

  • MediaSelectListActivity.RECORD_SOUND

  • MediaSelectListActivity.ADD_SLIDESHOW

从外面的activity读取媒体数据的应用返回的时候都回到onActivityResult()函数。

删除附件,AttachmentEditor里面有个handler,用来给ComposeMessageActivity传消息。所有删除附件操作的按钮都在AttachmentEditor上。对不同的媒体类型有不同的按钮,但是按下之后出口是一样的,之所以一样是因为所有的附件都存在SlideshowModel里,而这个SlideshowModel是: ArrayList<SlideModel> mSlides; 一列儿slide组成的。 每个slide可以包含video,image,audio,text, 其中前三者一般不能两两同时存在,唯一的例外是image和audio.
说回到那个remove操作,composeMessageActivity的Handler里的handleMessage函数,接到这个删除msg之后的操作是setAttachment().

标签:彩信,Android
0
投稿

猜你喜欢

  • Android中使用Kotlin实现一个简单的登录界面

    2023-01-29 13:51:37
  • Struts2通过自定义标签实现权限控制的方法

    2021-07-19 11:06:22
  • Android开发实现的简单五子棋游戏示例

    2022-10-26 04:47:59
  • C#学习笔记之状态模式详解

    2021-09-15 21:56:08
  • C#算法设计与分析详解

    2023-03-03 10:15:06
  • Android 实现图片生成卷角和圆角缩略图的方法

    2021-08-12 16:14:12
  • Android使用TextView跑马灯效果

    2022-05-20 20:07:20
  • 详解Kotlin和anko融合进行Android开发

    2021-08-15 19:34:16
  • Spring源码解析 Bean属性填充

    2021-06-28 19:17:16
  • Android新特性页面之ViewPager拖拽到最后一页再拖拽打开其他Activity(三种方法)

    2021-11-30 03:05:40
  • java高并发之理解进程和线程

    2023-09-16 20:03:17
  • java selenium 常见web UI 元素操作及API使用

    2021-08-30 00:50:18
  • Java中的这些骚操作你不能不知道!!!

    2022-07-08 12:28:14
  • Android 使用mediaplayer播放res/raw文件夹中的音乐的实例

    2023-12-19 08:28:11
  • Spring BeanFactory 与 FactoryBean 的区别详情

    2023-12-23 02:51:46
  • 详解springboot项目带Tomcat和不带Tomcat的两种打包方式

    2023-11-28 08:23:41
  • Android开发笔记之:复写按钮方法

    2023-01-18 05:44:12
  • Java中instanceof关键字的用法总结

    2022-12-11 15:52:27
  • SSM框架整合之junit测试的方法

    2022-11-12 16:03:19
  • 用C#编写ActiveX控件(三)

    2023-03-26 12:35:10
  • asp之家 软件编程 m.aspxhome.com