小弟最近在研究android短信部分的代码,android的短信功能用java语言很容易实现,我现在想把短信部分的功能完全用c/c++来实现,通过查看android的源码知道,各种短信请求是通过往RIL.java中的socket中写入相关数据实现的。于是我的想法是在上层用c建立一个名叫rild的scoket,并往这个socket里面写入数据长度和数据内容,这样下面的rild守护进程会自动读取socket中的内容,并做出相关的处理,来达到发送短信的目的。不知道这样的想法可行性大不,有人做过相关方面的吗,希望各位大侠能给予帮助。
int sockfd=socket(AF_LOCAL, SOCK_STREAM, 0);
int err=socket_local_client_connect(sockfd,SOCKET_NAME_RIL,ANDROID_SOCKET_NAMESPACE_RESERVED,SOCK_STREAM);
int anSms[] = {0x19, 0x50, 0x2, 0xFFFFFFFF, 0x1E, 0x310030, 0x300030, 0x340030, 0x310038,
0x350035, 0x350036,0x300030,0x300030,0x360030,0x380063,0x320033,0x620039,
0x640066,0x650030,0x310030,0x0};//RIL.jva中的byte数组序列化后的数据形式,这里直接给一定值
char szSmsLen[4] = {0};
szSmsLen[2] = (sizeof(anSms) / 256);
szSmsLen[3] = (sizeof(anSms) % 256);
send(sockfd, szSmsLen, sizeof(szSmsLen));
send(sockfd, anSms, sizeof(anSms));
close(sockfd);
发送到socket的程序大概就是这样的,运行在android模拟器上面显示的是send成功了,但是另一个模拟器根本就没收到任何信息,不知道这样做能不能达到发送短信的目的,急求各位高手帮助,谢谢。
int sockfd=socket(AF_LOCAL, SOCK_STREAM, 0);
int err=socket_local_client_connect(sockfd,SOCKET_NAME_RIL,ANDROID_SOCKET_NAMESPACE_RESERVED,SOCK_STREAM);
int anSms[] = {0x19, 0x50, 0x2, 0xFFFFFFFF, 0x1E, 0x310030, 0x300030, 0x340030, 0x310038,
0x350035, 0x350036,0x300030,0x300030,0x360030,0x380063,0x320033,0x620039,
0x640066,0x650030,0x310030,0x0};//RIL.jva中的byte数组序列化后的数据形式,这里直接给一定值
char szSmsLen[4] = {0};
szSmsLen[2] = (sizeof(anSms) / 256);
szSmsLen[3] = (sizeof(anSms) % 256);
send(sockfd, szSmsLen, sizeof(szSmsLen));
send(sockfd, anSms, sizeof(anSms));
close(sockfd);
发送到socket的程序大概就是这样的,运行在android模拟器上面显示的是send成功了,但是另一个模拟器根本就没收到任何信息,不知道这样做能不能达到发送短信的目的,急求各位高手帮助,谢谢。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货