小弟最近在研究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成功了,但是另一个模拟器根本就没收到任何信息,不知道这样做能不能达到发送短信的目的,急求各位高手帮助,谢谢。

解决方案 »

  1.   

    额,NDK接触比较少。。帮你顶一下~~~~
      

  2.   

    我也想学习NDK,不知道如何 学起,我都不知道如何 跑一个C程序在ANDROID上,JAVA的到是会
      

  3.   

    楼主绑定本机的iP多少,另一个模拟器的IP指定没?5554 5556这些肯定不行的!!其实可以不用发送到另一个模拟器!可以模拟器想PC发试试!!
      

  4.   

    4楼 说的是socket间AF_net类型的通信,需要指定ip和端口号。这里使用的是AF_Local类型,是不需要指定ip地址和端口号的。两个模拟器间发短信是可以实现的,在java代码中sendtextmessage()函数的目标手机号码指定为5554或者5556就可以了。我也很想知道怎么通过往rild socket中写入请求和相关数据达到发送短信的目的。