北京理工大学 20981 陈罡
注意,以下代码需要在破解版的moto sdk里面添加正版的头文件才能编译,纯粹是出于个人爱
好,尝试在破解的sdk下面编译正版的头文件,然后链接,没有任何其他目的。
编译的时候确实让偶费了番功夫。呵呵,不过总算结局是好的,小明可以发送短消息拉!!
a1200发送短消息总体来说还是比较简单的。确实moto那边做了非常多的工作,在此一并感谢
moto的开发人员了。对于发送短消息,必不可少的是moto官方native sdk中的两个头文件:
ZSMSMsg.h,ZSMSSession.h,这两个文件的内容,我就不方便透露了,有本领的大侠们自然可以
弄到。(NDA协议,怕怕)
具体的过程我们看代码吧,codes show everything,这句话是谁说得来着?说得太好了。假设
我们的程序名字为sms1.cpp,那么:
#include
#include //这个在破解版的sdk的include里面有
#include // 这是消息体定义的头文件
#include //这是异步发送过程的头文件,来历嘛...
//一定要是123,天知道为什么短信端口都是123
#define SMS_PORT 123
//这里定义你要发送的手机号码
#define SMS_TEL "xxxxxxxxxxx"
//这里是短消息的文本内容
#define SMS_TXT "hello, this is wayne speaking"
using namespace std ;
int main(int argc, char * argv[])
{
//开始我还纳闷呢,为什么moto的sms需要QString来传参数,
//char *不是很好嘛?后来一想,这可能是由于多国语言需要转换
//成为utf-8的格式,直接依赖qte似乎比较方便。
QString target_tel(SMS_TEL) ; // init the sms target tel
number
QString target_txt(SMS_TXT) ; // init the sms body text
ZMFMEntry target_entry ;
ZMFM::STATUS_T sms_status ;
ZMFM::STATUS_T session_status ;
ZSMSMsg * sms_msg ;
ZSMSSession * sms_session ;
// create new sms message
sms_msg = (ZSMSMsg *)ZMFMMsg::factory(ZMFM::MSG_TYPE_SMS);
// now set the target tel number
target_entry.setEntryVal(target_tel);
target_entry.setEntryType(ZMFM::ENTRY_TYPE_PLMN);
sms_msg->setTo(target_entry);
// set sms port number
sms_msg->setPortNumber( SMS_PORT, SMS_PORT ) ;
// set sms body text
sms_msg->setBody( target_txt ) ;
// create sms session
sms_session = (ZSMSSession *)ZMFMSession::open(ZMFM::MSG_TYPE_SMS,
session_status) ;
//smsListener *listener = new smsListener(pSession);
//pSession->setListener(listener,status);
session_status = sms_session->registerPortNumber(SMS_PORT, SMS_RECV_MODE_TEXT)
;
if( session_status == ZMFM::STATUS_SUCCESS){
cout<<"reg sms port ok"< } else {
cout<<"reg sms port fail"< delete sms_msg;
//delete listener;
ZMFMSession::close( sms_session );
exit(-1);
}
// send sms now
sms_session->send(sms_msg,sms_status);
if( sms_status == ZMFM::STATUS_FAIL ){
cout<<"send sms fail"< exit(0);
} else cout<<"send sms ok"< return 0 ;
}
cygwin下面的编译效果如下图:
代码不多,我自信也写的很清晰了,能够为moto开发的大侠们我想也肯定看得懂,在此就不聒
噪了。代码虽然简单,呵呵,编译得时候可就费了劲拉,通篇我们没有使用qte或者ezx的gui架
构,只是用了一下QString,理论上不需要那么多的lib其实不然,发送一个短信涉及到的库还
是非常多的,一下子还真不太容易编译。不过qte那套什么什么QObject,或者QApplication什
么的倒是可以能省则省了。言归正传,Makefile贴一下,
事先声明,全部的lib都是从手机里面拷下来的,没有版权问题吧。。。汗,总觉得签了保密协
议,这些东西就都是应该保密的东西。。。心里障碍吧。。。
Makefile ---->
EZX_BASE=..
CXX=arm-linux-g++
LNK=arm-linux-g++
STP=arm-linux-strip
MOC=$(EZX_BASE)/moc/moc
D2U=dos2unix
CXXFLAGS=-fno-exceptions -fno-rtti -Wall -g
INCLUDE=-I$(EZX_BASE)/include/qt -I$(EZX_BASE)/include/ezx
LIBDIRS=-L$(EZX_BASE)/lib -L$(EZX_BASE)/lib/ezx/lib
LIBS= -lezxmessagingsdk -lezxappbase -lqte-mt -lpthread \
-lezxappsdk -lipp-jp -lezxopenwindow -lipp-miscGen \
-lezxjpeg -lezxpm -lezxtapi -lezxdrmsp -lezxdrmsecuretime \
-lezxdrmcipher -lezxdrmclibhack
OBJS=sms1.o
APP=sms1
%.o: %.cpp
$(D2U) $<
$(CXX) $(CXXFLAGS) $(INCLUDE) -c $<
%.moc: %.cpp
$(MOC) $< -o $@
$(APP): $(OBJS)
$(CXX) $^ -o $@ $(LIBDIRS) $(LIBS)
$(STP) $^
clean:
rm -f -r $(APP) *.o *~
有了这些,编译的时候还会出现一些警告,不管了,反正对生成可执行格式的sms1没有影响。
然后,就可以在手机上真正运行sms1程序(用eKonsole,或者自己写个脚本直接从telnet上面
运行)。顺便提一下,手机会弹出一个什么确认对话框,这个框框挺让人郁闷的,是不是经过了什么安全性检查以后,就不会弹出了呢?这就不得而知了,我猜想这次是采用ezx的框架发送短信,可能就会有这个问题,如果采用tapi的底层api直接发送短信,可能就没有这些限制了吧,不过我看libezxtapi.so这个也是ezx作为前缀的,似乎也和他们的框架有关,呵呵,也许还是会弹出这种对话框吧。
发送确认对话框抓图如下:
也许经过授权以后,就可以直接发送sms了,期待中。
阅读(2268) | 评论(0) | 转发(0) |