在Mms源码AndroidMenifest中与sms接收相关的receiver:PrivilegedSmsReceiver和SmsReceiver,前者继承后者,接收广播后调用后者的onReceiveWithPrivilege()方法处理,而主要不同是申明了android.permission.BROADCAST_SMS,用来阻止SMS spoofing//关于SMS spoofing资料待查。
PrivilegedSmsReceiver接收android.provider.Telephony.SMS_RECEIVED。在SMSDispatcher,Handle中处理case:EVENT_NEW_SMS,其中函数dispatchMessage调用dispatchPdus发出OrderedBroadcast:SMS_RECEIVED,同时请求了一个足以让receiver去取得自己wake lock的wake lock,这里要说一下,在SmsMessage.createFromPdu()方法已经分析了message是cdma还是gsm,因此调用相应类的dispatchMessage函数。
回来继续分析PrivilegedSmsReceiver,接收到广播后,调用父类的onReceiveWithPrivilege()方法,并传递参数privileged=true,这里就进行了判断,对于没有permission的信息,直接ignore。
启动SmsReceiverService之前,用mStartingServiceSync同步请求了一个wake lock,在SmsReceiverService的handleMessage中release the wake lock.
关于SmsReceiverService,下面引一段前人的笔记:
.transaction.SmsReceiverService ,它被创建时首先 初始化了新的工作线程(HandlerThread对象)用来在后台完成相关动作,紧接着在onStartCommand方法里会将具体的任务通过消息(即调用service的Intent)发送给工作线程进行处理。根据 Intent.Action的名称,工作线程会处理4中情况:
A.系统启动完成后BOOT_COMPLETED:把发件箱(outbox)中的消息移动到发送队列(QueuedBox),然后开始发送队列中的消息,最后调用updateNewMessageIndicator方法更新状态栏消息指示图标;
B.处理Sms接收handleSmsReceived:从Intent中取得消息对象,直接显示给用户(Class0类型)或者保持到数据库中。
C.处理Sms发送handleSmsSent:从待发送消息队列中取得消息,并按次序逐个发送;
D.处理通讯网络状态改变handleServiceStateChanged:用户从无信号状态进入有信息号状态后,继续执行发送任务的情况。
handleSmsReceived调用insertMessage方法,其中:
1、sms.getProtocolIdentifier()=0x40,直接返回null,不做任何处理。
2、sms.getMessageClass() = CLASS_0,直接显示信息
3、sms.isReplace()=true,替换原来数据库里面的短信
4、如果以上情况都不是,直接保存到uri:content://sms/inbox
调用MessagingNotification.blockingUpdateNewMessageIndicator()用Notification或者toast的方式提醒用户接收到新信息。
分享到:
相关推荐
MMS发送接收流程协议分析,以及在Android中的相关实现
短信资料短信资料短信资料短信资料短信资料短信资料短信资料短信资料短信资料短信资料
彩信的英文名是MMS,它是Multimedia Messaging Service的缩写,意为多媒体信息服务 彩信的最大的特色就是支持多媒体功能,能够传递功能全面的内容和信息,包括文字、图像、声音、数据等各种多媒体格式的信息 ...
MMS彩信业务流程及代码实现,业务流程,彩信的接收
然后在这个广播接收者接收到信息之后马上启动一个service public void onReceive Context context Intent intent { Log v "MyBrocast onReceive" "testtttttttttttt" ; if intent getAction ...
信息的接收工作是由底层来完成的,当有一个 新的信息时底层完成接收后会以Intent的方式来通知上层应用,信息的相关内容也包含在Intent当中,Android所支持的信息Intent都定义在android.provider.Telephony.Intents...
mms 彩信收发流程分析方法说明 收发流程及错误原因分析
短信(sms,mms)发送,接收包 jar
一个基于串口的手机短信发送/接收程序;Demo很简单,是以异步方式读写串口的;在对话框初始化中修改串口的配置参数正确后,能100 的正常发送/接收短信
对报文进行解析及分析,对每一包发送内容进行详细分析,server to client 告知流属性等。
本篇文章是对Android中的短信发送流程进行了详细的分析介绍,需要的朋友参考下
Android MMS彩信发送代码流程+UML流程图
关于彩信的接收和发送,c代码,有兴趣的朋友来看下
主要对android系统中MMS模块的UI进行了具体的分析。
MMS发送流程(代码版)android
基于Symbian平台的手机短信、彩信的接收和发送的实现。
Android4.42 短信MMs源码 不可独立运行
PDU SMC&MMS数据协议解析分析.xls
mms气泡短信修改版