javaME带端口短信收发

问题描述

一个菜鸟在学习javaME的SMS这块,请高人指点迷津照书上例子COPY下来,sun的模拟器能收发,但在真机上却收不到短信,短息好像能发出,但出去后就石沉大海,不知道问题出在哪里。还有模拟器和真机都不能给本机发短信吗,发了也是收不到。在NokiaE52,N73,6300c,SonyW810上都试过,不行!急,查了老多资料不知道为什么我刚注册进来不多久,没多少分,但请各位高手帮忙,谢谢还有就是其中的Push注册,在真机上到底是怎么出现的?不用开程序,接到短信就自动启动了?下面的代码来自书《javaME核心技术与最佳实践》importjava.io.IOException;importjavax.microedition.io.Connector;importjavax.microedition.midlet.*;importjavax.microedition.lcdui.*;importjavax.wireless.messaging.*;publicclassSMSMIDletextendsMIDletimplementsCommandListener,MessageListener{privateDisplaydisplay=null;//以服务器模式运行的MessageConnectionprivateMessageConnectionreceiveConn=null;privatebooleandone=false;MessageReaderreader=null;privateListlist=null;//主界面privateDisplayableresume=null;privateSendMessageUIsend=null;publicstaticfinalString[]items={"发信息","收件箱"};publicstaticfinalCommandexitCommand=newCommand("退出",Command.EXIT,1);publicstaticfinalCommandbackCommand=newCommand("返回",Command.BACK,2);publicvoidstartApp(){if(display==null){display=Display.getDisplay(this);list=newList("短消息中心",List.IMPLICIT,items,null);resume=list;list.addCommand(exitCommand);list.setCommandListener(this);}initMessageServer();display.setCurrent(resume);}privatevoidinitMessageServer(){//程序启动后,建立服务器模式的MessageConnection,监听短消息done=false;Stringurl="sms://:"+this.getAppProperty("port");System.out.println(url);try{receiveConn=(MessageConnection)Connector.open(url);//设置监听器,异步模式等待短信receiveConn.setMessageListener(this);reader=newMessageReader();newThread(reader).start();}catch(IOExceptionex){this.displayError(ex.toString(),list);}}publicvoidpauseApp(){//保存当前界面resume=display.getCurrent();release();}publicvoiddestroyApp(booleanunconditional){release();}privatevoidrelease(){//释放资源done=true;try{receiveConn.setMessageListener(null);receiveConn.close();receiveConn=null;}catch(IOExceptionex){ex.printStackTrace();}}publicvoidsetCurrent(Displayabledisplayable){display.setCurrent(displayable);}publicvoiddisplayError(Stringmessage,Displayabledisplayable){Alertalert=newAlert("错误提示");alert.setType(AlertType.ERROR);alert.setString(message);alert.setTimeout(2000);display.setCurrent(alert,displayable);}publicvoidbackToMain(){display.setCurrent(list);}publicvoidcommandAction(Commandcmd,Displayabledisplayable){if(cmd==exitCommand){destroyApp(false);notifyDestroyed();}elseif(cmd==List.SELECT_COMMAND){Stringlabel=list.getString(list.getSelectedIndex());if(label.equals(items[0])){if(send==null)send=newSendMessageUI(this);send.clean();display.setCurrent(send);}elseif(label.equals(items[1])){}}elseif(cmd==backCommand){display.setCurrent(list);}}//当消息到来的时候,nitifyIncomingMessage()方法被调用publicvoidnotifyIncomingMessage(MessageConnectionmessconn){if(messconn==receiveConn){reader.handleMessage();}}classMessageReaderimplementsRunnable{privateintpendingMessage=0;publicvoidrun(){while(!done){synchronized(this){//如果没有消息,则线程等待if(pendingMessage==0){try{wait();}catch(InterruptedExceptionex){ex.printStackTrace();}}//读取消息,pendingMessage--pendingMessage--;}//接收短信Messagemessage=null;try{message=receiveConn.receive();}catch(IOExceptionex){//处理异常}if(messageinstanceofTextMessage){TextMessagetm=(TextMessage)message;Stringcontent=tm.getPayloadText();Stringaddress=tm.getAddress();Formform=newForm("接收到短信");form.append(address+"n");form.append(content+"n");form.addCommand(backCommand);form.setCommandListener(SMSMIDlet.this);display.setCurrent(form);}elseif(messageinstanceofBinaryMessage){//这里不考虑BinaryMessage的情况}}}//又短消息进入,唤醒等待的线程读取消息publicsynchronizedvoidhandleMessage(){pendingMessage++;//未读取的消息数增加1notify();}}}importjavax.microedition.io.Connector;importjavax.microedition.lcdui.*;importjavax.wireless.messaging.*;publicclassSendMessageUIextendsFormimplementsCommandListener,Runnable{privateSMSMIDletmidlet=null;privateTextFieldaddress=null;privateTextFieldmessage=null;privateStringnumber="";//收信人号码privateStringcontent="";//短信内容publicstaticfinalCommandsendCommand=newCommand("发送",Command.OK,1);publicstaticfinalCommandbackCommand=newCommand("返回",Command.BACK,2);publicSendMessageUI(SMSMIDletmidlet){super("发送短信");this.midlet=midlet;address=newTextField("收信人","",20,TextField.PHONENUMBER);message=newTextField("短信内容","",140,TextField.ANY);this.append(address);this.append(message);this.addCommand(sendCommand);this.addCommand(backCommand);this.setCommandListener(this);}publicvoidclean(){//清除收信人和短信内容文本框的内容address.setString("");message.setString("");}publicvoidcommandAction(Commandcmd,Displayabledisplayable){if(cmd==backCommand){midlet.backToMain();}elseif(cmd==sendCommand){//启动发送短消息的线程number=address.getString();content=message.getString();newThread(this).start();}}publicvoidrun(){Stringaddress="sms://"+"+"+number+":"+midlet.getAppProperty("port");MessageConnectionmconn=null;try{//建立客户端模式的MessageConnection,读者应该在这里添加一个等待界面mconn=(MessageConnection)Connector.open(address);TextMessagetm=(TextMessage)mconn.newMessage(MessageConnection.TEXT_MESSAGE);//设置消息地址和文本数据tm.setAddress(address);tm.setPayloadText(content);//发送消息mconn.send(tm);mconn.close();midlet.backToMain();}catch(Exceptionex){ex.printStackTrace();midlet.displayError(ex.toString(),this);}}}这个是jad文件port:50000MIDlet-1:SMSMIDlet,,SMSMIDletMIDlet-Jar-URL:SMSMIDlet.jarMicroEdition-Configuration:CLDC-1.1MIDlet-Push-1:sms://:50000,SMSMIDlet,*MIDlet-Version:1.0.0MIDlet-Name:SMSMIDletMidletSuiteMIDlet-Vendor:MidletSuiteVendorMicroEdition-Profile:MIDP-2.0MIDlet-Permissions:javax.microedition.io.PushRegistry,javax.microedition.io.Connector.sms

解决方案

解决方案二:
补:两部对发的手机都安装的这个程序
解决方案三:
引用1楼nilqujianping的回复:

补:两部对发的手机都安装的这个程序

学习
解决方案四:
LZ可以参考这个帖子:
解决方案五:
我看了,他的代码跟我贴的这个没多大差别,还是谢谢你
解决方案六:
抱歉,没做过短信接收和PUSH如果是发送不带端口的短信,手机是能正常接收到的
解决方案七:
引用5楼kf156的回复:

抱歉,没做过短信接收和PUSH如果是发送不带端口的短信,手机是能正常接收到的

哦,好吧,还是非常谢谢你!!!
解决方案八:
带端口的短信要用软件在端口上监听才能收到并且经本人测试在短信发出后运营商会将短信发送给你一次软件开的晚了也是收不到的
解决方案九:
展现消息的语句直接在notifyIncomingMessage方法里起线程做试试
解决方案十:
学习学习
解决方案十一:
该回复于2011-04-11 08:35:58被版主删除
解决方案十二:
支持一下,其实WTK下面关于短信有个demo代码的

时间: 2024-08-01 13:05:36

javaME带端口短信收发的相关文章

AT指令怎么发送带端口短信吗

问题描述 AT指令怎么发送带端口短信吗?能给个c#代码吗 解决方案 解决方案二:建议自己百度去

GMS Modem 短信收发组件(C#版本)

测试代码: http://www.cnblogs.com/Files/dyj057/Gms%20Modem短信收发组件.rar 短信的部署方案很多种,我们现在介绍3种主要的部署方案.客户可以在这几个方案中选择一个来实施,完成短信的应用. GMS Modem的部署 购买硬件设备     GMS Modem(短信模块)是一个硬件设备,通过串口与计算机通信,实现短信的发送.这个硬件都是可以在市场上很容易买到的,价格在1000-2000元之间.最好选用西门子TC35i和MC35为核心的短信模块,我们也提

请教j2me如何接收无端口短信??

问题描述 网上找了一大圈,都说无法接收无端口短信,只能接收带端口的但是,有款软件叫资费通的j2me版本就实现了此功能功能如下,发送0101011到10086,然后,资费通成功获取了10086的回复信息,而且,收件箱和发件箱都没记录有谁知道是如何实现的呢????所以不要回复实现不了类似的,,因为有人已经实现了.本人现在尝试直接串口发AT指令,但是也毫无头绪,请大侠们指教 解决方案 解决方案二:这是拦截吧?不是无端口短信吧.解决方案三:如何拦截呢??解决方案四:不会吧,真的有J2ME程序实现了这个功

android手机自带的短信软件会拦截掉短信广播的吗?

问题描述 android手机自带的短信软件会拦截掉短信广播的吗? 在androidAVD上测试时可以正常收到短信广播的,但是在真机测试过程中受到短信却没反应,所以想询问一下android手机自带的短信接收到广播之后是不是就会拦截掉,不让其他的软件接收. 解决方案 你的广播频率如果人家不知道怎么拦截,是不是你在真机上测试时没有开通权限呀 解决方案二: 有权限的啊,装的时候太特别注意了这个,安装的时候有看到说接受短信的权限.我广播优先级没设定.

邮箱登陆发短信-如何用java代码,模拟登陆139邮箱,并用139邮箱自带的短信功能给一个移动用户发送短信

问题描述 如何用java代码,模拟登陆139邮箱,并用139邮箱自带的短信功能给一个移动用户发送短信 RT 要是能说到要用到哪些知识点,以及直接提供相应的代码那就更好了

短信接口-目前在用java做电信移动联通的短信收发接口,有做过的人请教!!!!!!!!!急

问题描述 目前在用java做电信移动联通的短信收发接口,有做过的人请教!!!!!!!!!急 BOSS 让我两周之内完成 头都大了,看了三个运营商的协议,看懂了一部分,现在的结果就是 单个号码发送 都可以了,就是不知道怎么接收短信,怎么获取每个用户短信送达状态. 发送我是这么做的: CMPP: 先连接网关,往socket里面写登陆报文输入,读取网关返回的登陆响应报文,登陆成功,提交submit报文,获取submit响应报文,然后短信就收到了. SMGP:类似 SGIP:类似 疑问:1) 怎么接收短

如何用java开发短信收发的软件了?

问题描述 如何用java开发短信收发的软件了?除了短信猫,有没有其他的方法.或者不用其他的外设,只用软件的方式开发收发短信的软件 解决方案 解决方案二:只用软件开发?中国移动会干么...解决方案三:你要相信自己,其实是可以的,移动公司就是找人写的软件,学软件的人都是牛人!!软件加油!!解决方案四:各个移动运营商都有相应的网关平台(短信网关),不用任何外设,楼主申请后,用程序直接调用就可以了

手机短信收发程序

问题描述 大家有没有人做过手机短信收发系统是不是要先找一个SP然后由他们提供一个短信接入号码和一些COM组件COM组件里提供的是一些短信的收发方法??有这方面编程经验的人可以提供下资料吗谢谢 解决方案 解决方案二:Net/C#实现中国移动CMPPv3.0ISMGSP收发短信的SP客户端:看看这个是不是你想要的.解决方案三:看不了哦楼上的解决方案四:买一个短信猫,一般猫的供应商会提供开发包,通过开发包读取(接收短信自己处理)或发送短信.搜一下短信猫,很多.解决方案五:接收短信这里我有点问题比如第一

湖北全省春节拜年短信收发近9亿条

荆楚网消息 (楚天都市报) (记者黄宏)这个春节里,全省手机用户人均收发短信近30条.据记者昨从运营商处了解,从大年三十至正月初六,全省春节7天短信收发量接近9亿条,"虎虎生威"在拜年短信中出现的频率最高. 大年三十和正月初一,拜年短信特别集中,占了春节期间短信总量的近七成.一些市民称,春节前几天,多为阴雨天气,"宅"在屋里,也就比往年发了更多的拜年短信. 由于今年是农历虎年,不少短信都"虎"上一把,比如祝对方"虎虎生威".&