这里也许没有严谨的结构,只是关于android信息应用的点点滴滴,当然不管是smart phone还是feature phone的信息(短信和彩信)都是这些东西。不过本人文笔实在有限,写得不好还请大家谅解,如果有写错的地方,欢迎拍砖指正,一定要告诉我及时改正。写此blog记录下自己工作中的学习积累,也算是一个总结吧。现在关于android信息的结构网上已经有很多,可以在网上搜到不少(09年、10年那时可没这么多),所以这里就不贴图了,但还是要简单说下才好,好了,不说废话了,开始正文。
Mms的代码主要分布在packages和Framework两部分,在packages中又分了ui、transaction、model、data和utils几个包(还有其它的,这几个比较重要呀),framework中主要是关于短彩信编解码和RIL部分。这是按着android的代码结构来说的,按功能呢?一个信息应用总是包括信息的编辑、显示预览、收发、编解码和存储。结合代码就是这样的:
ConversationList.java,那么多条信息一进去总要有个列表吧,也算信息的主界面了,android的信息是按会话分组的,简单的说就是一个联系人对一个会话(群发的时候是多个联系人对应一个会话),打开每个会话就是ComposeMessageActivity.java,编辑界面也是这个,没错,编辑和查看是一个界面,这是android信息和大部分feature phone信息不一样的地方,看看经典的nokia,收件箱、发件箱和草稿箱这些东东android可没有哦。有点跑题了,回来看编辑界面,如果是短信编辑,那么到ComposeMessageActivity.java这也就算完了,彩信呢还有SlideEditorActivity.java界面,这个是彩信幻灯片编辑界面,编辑完了还想预览下SlideshowActivity.java。主要的就这些,这么少! 不要轻敌,由这几个界面可以关联ui包下所有的代码了。
信息看了,也编辑了,编辑完我们要发信息了,接下来收发逻辑就是Transaction包的事了,SmsReceiverService.java这个是短信的,TransactionService.java是彩信的,当你因为网络状态不对发不了彩信的时候,你会经常遇到它。SendTransaction.java彩信发送,NotificationTransaction.java自动接收彩信,RetrieveTransaction.java手动下载彩信,TransactionSettings.java获取apn相关信息的。短信呢是走RIL出去的,彩信呢是走http协议的,一个电路域,一个分组域。
彩信编解码:\frameworks\base\core\java\com\google\android\mms,那些前面以pdu开头的类都是,重点关注下PduPersister.java这个类,为什么?调试下就知道了,动手做吧(persistData方法,persistPart方法等等),这部分彩信的代码差不多是大半个彩信库的代码了。
短信编解码:frameworks\base\telephony\java\com\android\internal\telephony在这里,不过这里的代码太多了 SmsMessage.java这个类的信息需要是关注下,RIL.java我们也要看,rilc的相关代码也要看的,不然这从上到下怎么能走通呢。
最后一个了存储,android信息是用数据库来记录信息的,以前呢大部分feature phone的信息是写文件的,像winCE平台的信息。数据库代码在这里
数据库com.android.provider.telephony,这个在是package层,这意味什么? 我们可以把它当成一个apk直接run到手机里,不用平台编译了,调试验证方便不少啊。
--MmsProvider 彩信
--SmsProvider 短信
--MmsSmsProvider 会话
--TelephonyProvider APN 信息不使用
--MmsSmsDatabaseHelper 数据库表创建
写了这些,不过都只是简单的说说,后面会针对具体的点来写,也希望能坚持下去。第一次写这么多,不足的地方欢迎批评,谢谢!