Java me 用于发送/接收SMS的j2me WMA应用程序中的SecurityException
我正在用j2me开发一个与无线消息传递API(WMA)一起工作的应用程序。应用程序任务是在两部手机之间发送和接收短信。当我在NetBeans emulator中运行应用程序时,它工作正常,但当我在诺基亚5200手机上运行应用程序时,我在手机上给出了以下例外情况:Java me 用于发送/接收SMS的j2me WMA应用程序中的SecurityException,java-me,sms,netbeans-7,securityexception,wma,Java Me,Sms,Netbeans 7,Securityexception,Wma,我正在用j2me开发一个与无线消息传递API(WMA)一起工作的应用程序。应用程序任务是在两部手机之间发送和接收短信。当我在NetBeans emulator中运行应用程序时,它工作正常,但当我在诺基亚5200手机上运行应用程序时,我在手机上给出了以下例外情况: Security java/lang/SecurituException Not allowed to open connection 我的应用程序的JAD文件是: MIDlet-1: Midlet, , hello.Midlet M
Security java/lang/SecurituException Not allowed to open connection
我的应用程序的JAD文件是:
MIDlet-1: Midlet, , hello.Midlet
MIDlet-Jar-Size: 36375
MIDlet-Jar-URL: SinaNetwork.jar
MIDlet-Name: SinaNetwork
MIDlet-Permissions: javax.microedition.io.Connector.sms, javax.wireless.messaging.sms.receive, javax.wireless.messaging.sms.send
MIDlet-Vendor: Vendor
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
申请代码还包括:
Thread receive=new Thread(new Runnable() {
MessageConnection ms;
public void run() {
// System.out.print("*****************SALAM*******");
try {
ms= (MessageConnection) Connector.open("sms://:"+7000);
// System.out.println("Zoor mizanam Receive konam");
Date zaman=new Date();
long zamanTemp=zaman.getTime();
TextMessage tempmes=(TextMessage) ms.receive();
// System.out.print("SMS receive: "+tempmes.getPayloadText());
Midlet.messageReceived=true;
Midlet.ReceivedThatWeDontKnowIsRandom=tempmes.getPayloadText();
}
catch(SecurityException eds)
{
eds.printStackTrace();
// System.out.print("");
}
catch (IOException ex) {
ex.printStackTrace();
}
}
});
receive.start();
Thread sendmesThread=new Thread(new Runnable() {
public void run() {
try {
MessageConnection mc=(MessageConnection) Connector.open("sms://"+Midlet.smsPhoneNumber+":"+5000);
TextMessage tm=(TextMessage) mc.newMessage(MessageConnection.TEXT_MESSAGE);
// System.out.print("PNF : "+phoneNumberField.getString());
tm.setPayloadText(rd+"-"+phoneNumberField.getString());
mc.send(tm);
// System.out.print("message sent from client on port 5000");
mc.close();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
});
sendmesThread.start();
我认为问题在于应用程序无法打开发送或接收SMS的连接,但我不知道为什么,因为我在emulator中没有问题。您的问题可能存在于您尝试使用的端口:7000和5000。我相信你希望短信跳过用户收件箱,只被应用程序处理,对吗 在执行此操作之前,请确保您的应用程序可以从发送包含以下代码的简单短信 评论后更新
关于安全例外:可能手机只接受制造商和/或电信运营商/运营商的签名。在不同的手机上尝试此签名版本。您的问题可能存在于您尝试使用的端口:7000和5000。我相信你希望短信跳过用户收件箱,只被应用程序处理,对吗 在执行此操作之前,请确保您的应用程序可以从发送包含以下代码的简单短信 评论后更新
关于安全例外:可能手机只接受制造商和/或电信运营商/运营商的签名。在不同的手机上尝试此签名版本。我尝试了此代码,但此代码也有相同的问题。我几乎可以肯定问题出在打开连接线上,但我不知道为什么会出现这个该死的问题。您是应用程序签名的吗?如果您收到SecurityException,那么这可能就是问题所在。是的,我在这里签署了应用程序:www.j2start.com/p/sign-your-midlet.html。。。我真的搜索了整个网络,但没有找到任何有用的东西。亲爱的,你知道吗?也许手机只接受制造商和/或电信运营商/运营商的签名:(你也可以在不同的手机上试用这个签名版本吗?我试过了。我会告诉你我会怎么做。谢谢:)我试过这个代码,但是这个代码也有同样的问题。我几乎可以肯定问题出在打开连接线上,但我不知道为什么会有这个该死的问题。你的应用程序签名了吗?如果您收到SecurityException,那么这可能就是问题所在。是的,我在这里签署了应用程序:www.j2start.com/p/sign-your-midlet.html。。。我真的搜索了整个网络,但没有找到任何有用的东西。亲爱的,你知道吗?也许手机只接受制造商和/或电信运营商/运营商的签名:(您也可以在不同的手机上试用此签名版本吗?我尝试过。我会告诉您我将要做什么。谢谢:)
public boolean sendSms(String number, String message){
boolean result = true;
try {
//sets address to send message
String addr = "sms://"+number;
// opens connection
MessageConnection conn = (MessageConnection) Connector.open(addr);
// prepares text message
TextMessage msg =
(TextMessage)conn.newMessage(MessageConnection.TEXT_MESSAGE);
//set text
msg.setPayloadText(message);
// send message
conn.send(msg);
conn.close();
} catch (SecurityException se) {
// probably the user has not allowed to send sms
// you may want to handle this differently
result = false;
} catch (Exception e) {
result = false;
}
return result;
}