短信的接收流程应用层
1、源文件
这部分代码在packages/apps/Mms下,涉及的主要类:
com.android.mms.transaction.PrivilegedSmsReceiver
com.android.mms.transaction.SmsReceiver
com.android.mms.transaction.SmsReceiverService
com.android.mms.transaction.MessagingNotification 2、图解 短信接收的时序图: 注意:SeviceHandler是SmsReceiverService的内部类,SmsReceiver是PrivlegedSmsReceiver的父类;
3、详细分析 3.1 PrivilegedSmsReceiver到SmsReceiverService 1)
PrivilegedSmsReceiver这个接收器从中间才能获取数据 PrivilegedSmsReceiver是一个广播接收器并且继承自SmsReceiver,在AndroidManifest.xml 中有如下声明: android.provider.Telephony.SMS_RECEIVED该action在那被使用到了?如果大家有看过分析中间层的接收流程的童鞋就很清楚了,中间层处理接收到的短信的时侯最后会调用到SMSDispatcher的protected void dispatchPdus(byte[][] pdus) 方法,让我们回眸一下:
protected void dispatchPdus(byte[][] pdus) {Intent intent = new Intent(Intents.SMS_RECEIVED_ACTION);intent.putExtra("pdus", pdus);intent.putExtra("encoding", getEncoding());intent.putExtra("sub_id", mPhone.getSubscription()); //Subscription information to be passed in an intentdispatch(intent, "android.permission.RECEIVE_SMS");}大家肯定会问dispatch又干了些什么了?
请看 下面:
void dispatch(Intent intent, String permission) {mWakeLock.acquire(WAKE_LOCK_TIMEOUT);mContext.sendOrderedBroadcast(intent, permission, mResultReceiver,this, Activity.RESULT_OK, null, null);}看到这就不用我多说了吧,很显然是发送了一个叫做Intents.SMS_RECEIVED_ACTION的广播,那又有人刨根问底儿了,上面两个值一样吗?请看intent中对该变量的定义:
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)public static final String SMS_RECEIVED_ACTION ="android.provider.Telephony.SMS_RECEIVED"; 到这大家应该明白PrivilegedSmsReceiver会接收到中间层的广播,并且该广播很不一般它承载了短信的内容,它从中间层接过接力棒继续向上传递。 2)
PrivilegedSmsReceiver传递数据 PrivilegedSmsReceiver从中间层获取到短信的数据后会调用onReceiveWithPrivilege()方法,该方法定义在它的父类SmsReceiver中。该方法没有做太多的操作,仅仅是传递消息,一下是其核心代码: protected void onReceiveWithPrivilege(Context context, Intent intent, boolean privileged) {if (!privileged && (intent.getAction().equals(Intents.SMS_RECEIVED_ACTION)|| intent.getAction().equals(Intents.SMS_CB_RECEIVED_ACTION))) {return;}intent.setClass(context, SmsReceiverService.class);intent.putExtra("result", getResultCode());beginStartingService(context, intent);}它将处理短信的任务交到SmsReceiverService的手中,SmsReceiverService才是真正干活的家伙。
3)SmsReceiverService处理 SmsReceiverService它是一个服务,当它开启的时候:首先是在onCreate中初始化
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】 进行投诉反馈!