短彩信的接收流程
涉及的文件
com.android.internal.telephony/Ril.java
com.android.internal.telephony/SMSDispatcher
com.android.internal.telephony/CommandsInterface
com.android.internal.telephony/GsmSMSDispatcher
com.android.internal.telephony/CdmanSMSDispatcher
com.android.internal.telephony/ImsSMSDispatcher
hardware/ril/libril/ril.cpp
com.android.mms.transaction/PrivilegedSmsReceiver
流程分析
时序图
android ril java层接收短息的流程
1)监听底层上报的数据
在Ril.java中定义了一个receive的框架:当接收到短信时,底层首先通过rild将接收到的短信通过socket传送给Ril.java,那大家都知道这个短信接收是一个不定时的,所以就必须有一个监听器一直监视这个socket一旦有短信就触发其相应的操作。那Ril.java是否有定义这样的一个监听器或者类似的功能了?(补充:这涉及一个Modem端与rild的通信,rild是一个守护进程,是整个android ril层的入口点,这部分笔者不是很清楚,推荐网页http://blog.163.com/yan_zhennan@126/blog/static/10934475020122275412446/)
通过查看代码我们可以发现RILReceiver的内部类:
class RILReceiver implements Runnable {
byte[] buffer;
RILReceiver() {
buffer = new byte[RIL_MAX_COMMAND_BYTES];
}
public void
run() {
int retryCount = 0;
String rilSocket = "rild";
try {for (;;) {
LocalSocket s = null;
LocalSocketAddress l;
boolean multiRild = SystemProperties.getBoolean("ro.multi.rild", false);
if (mInstanceId == 0 || multiRild == false) {
rilSocket = SOCKET_NAME_RIL;
} else {
rilSocket = SOCKET_NAME_RIL1;
}
try {