首页
社区
课程
招聘
[求助]如何使用纯c(不调用java)实现短信的收发
发表于: 2014-8-5 13:46 7157

[求助]如何使用纯c(不调用java)实现短信的收发

2014-8-5 13:46
7157
如题
希望各位大神可以给我指明方向
目前自己研究看过at命令和android的telephony和ril
但是感觉都不像是
希望大神们解答时可以说的详细些
谢谢诸位

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
若我记得没错的话,发送短信用的是startAcvitity(intent),intent里面包含了短信信息,那肯定是走到activityManagerService上了。

用C可以模拟与activityManagerService的通信,达到发送短信的目的;我本人没试过,但是理论上可行。
2014-8-5 14:24
0
雪    币: 110
活跃值: (254)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
查了一些资料 也说java发短息是通过socket与底层通讯实现的,可是现在还没有找到,能不能说的更清楚些
2014-8-6 14:17
0
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
走服务呀 android很多功能都是远程调用的 发送短信走的是activityManager服务的startAcvitity接口,用本地层语言模拟这个过程。

至于Socket,我觉得你说的是PhoneService与RIL通信这块;我个人觉得没必要这么做。
2014-8-6 14:34
0
雪    币: 53
活跃值: (275)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
Binder调用,指定AIDL中的命令码,按照AIDL生成的接口类的打包规则依次发送数据即可
发送短信示例:
adb shell
# service call isms 6 s16 10086 s16 +8613800755500 s16 0000 i32 0 i32 0

service可去查看Android代码 frameworks\native\cmds\service\service.cpp,本质上很简单就是封装了binder调用。

ISms中sendText接口的proxy端实现(Android4.2为例),除了InterfaceTokey service命令会自动加入外,其他参数依次传递,短信目的地址,短信中心,发送的内容,两个pendingintent我们不用都传0即可:

public void sendText(String destAddr, String scAddr, String text, android.app.PendingIntent sentIntent, android.app.PendingIntent deliveryIntent)
        throws android.os.RemoteException
      {
        Parcel _data = Parcel.obtain();
        Parcel _reply = Parcel.obtain();
        try {
          _data.writeInterfaceToken("com.android.internal.telephony.ISms");
          _data.writeString(destAddr);
          _data.writeString(scAddr);
          _data.writeString(text);
          if (sentIntent != null) {
            _data.writeInt(1);
            sentIntent.writeToParcel(_data, 0);
          }
          else {
            _data.writeInt(0);
          }
          if (deliveryIntent != null) {
            _data.writeInt(1);
            deliveryIntent.writeToParcel(_data, 0);
          }
          else {
            _data.writeInt(0);
          }
          this.mRemote.transact(6, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
2014-8-6 20:59
0
雪    币: 147
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
太赞了  原来不调用函数 直接可以这样搞
2014-11-11 22:09
0
游客
登录 | 注册 方可回帖
返回
//