📄 threadmmshandler.java
字号:
/*///////////////////////////////////////////////////////////////////////////////
//文档生成日期:2005.11.3
//
//(1)概述:
//类名称:ThreadMMSHandler
//类说明:
// This code handles inbound datagram connections in response to a pushed datagram connection。
//所在子系统:MIMESMSnotifyPushRegistry
//
//系统总描述:
本工程发送一个MIME头的短信给目标手机。MIME头中指明了对方应该如何处理。
对方手机收到后,触发注册了PushRegistry的MIDlet应用,并解析短信,
按照指明的命令操作。
子系统描述:
注册Push Registry,监听sms://:8341,当然端口可以修改的。
这样,收到带有MIME头的短信后,解析并按照命令行事.
//(2)历史记录:
//创建人: David Hemphill
//联系我: Google Talk >> zhengyun@gmail.com
//Blogs: http://blog.csdn.net/zhengyun_ustc/以及http://www.cnblogs.com/zhengyun_ustc
//(3)版权声明:
//我这个版本的MIMESMSnotifyPushRegistry,
//j2me客户端代码仅仅允许您借鉴,但不得用于商业用途,除非得到郑昀本人的授权。本人保留所有权利。
////////////////////////////////////////////////////////////////////*/
package com.ultrapower.model;
import java.io.IOException;
import java.io.InterruptedIOException;
import javax.microedition.io.Connector;
import javax.microedition.lcdui.StringItem;
import javax.wireless.messaging.Message;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;
import com.ultrapower.control.GUIController;
import com.ultrapower.midlet.MIMEReceiver;
/**********************************************************
//ThreadMMSHandler
//
//Class Description:
// This code handles inbound datagram connections in response to a pushed datagram connection。
//
//Author:
// zhengyun@ultrapower 2005.11.3
//
**********************************************************/
public class ThreadMMSHandler
extends Thread {
private MIMEReceiver m_midlet = null;
private String m_sConnURL = "sms://:8341";
/*
* 短消息连接
*/
private MessageConnection m_Conn = null;
public ThreadMMSHandler(String c, MIMEReceiver midlet){
m_sConnURL = c;
m_midlet = midlet;
}
private synchronized void notifyParseMMSError(String sErrorDescription)
{
// 设置当前出错信息
m_midlet.controller.setListConnectionsException(sErrorDescription);
////////////////////////////////////////////
// 告诉控制器,出错了
m_midlet.controller.handleEvent(GUIController.EventID.EVENT_DISPLAYMMS_ERROR,
null);
////////////////////////////////////////////
}
private synchronized void notifyListMMSError(String sErrorDescription)
{
// 设置当前出错信息
m_midlet.controller.setListConnectionsException(sErrorDescription);
////////////////////////////////////////////
// 告诉控制器,出错了
m_midlet.controller.handleEvent(GUIController.EventID.EVENT_LISTCONNECTIONS_ERR,
null);
////////////////////////////////////////////
}
/*
* 解析短消息,并通知控制器
*/
public void run()
{
// 打开端口,收消息,解析消息
receiveMessage();
}
/*
* 解析消息,从而得到消息的正文以及源号码
*/
private synchronized void receiveMessage() {
String text = "没有";
String address = "没有";
boolean bIsConnectorOk = true;
String sErrorListDescription = "";
/*
* 第一步,根据传入的连接号打开端口
*/
try
{
m_Conn = (MessageConnection)Connector.open(m_sConnURL);
}
catch (IOException ioe)
{
bIsConnectorOk = false;
sErrorListDescription = "无法打开端口!"
+ ioe.getMessage() +
"/" + ioe.getClass();
}
catch(SecurityException se)
{
bIsConnectorOk = false;
sErrorListDescription = "可能没有权限打开端口!"
+ se.getMessage() +
"/" + se.getClass();
}
catch(Exception exc)
{
bIsConnectorOk = false;
sErrorListDescription = exc.getMessage() +
"/" + exc.getClass();
}
if(bIsConnectorOk == false)
{
notifyListMMSError(sErrorListDescription);
return;
}
Message msg = null;
boolean bIsParserOk = true;
String sErrorParseDescription = "";
try
{
if(m_Conn != null)
{
//m_Conn = ( MessageConnection)Connector.open("sms://:8341" );
msg = m_Conn.receive();
if( msg != null && msg instanceof TextMessage )
{
TextMessage tmMsg = (TextMessage)msg;
text = tmMsg.getPayloadText();
address = tmMsg.getAddress();
if(address.startsWith("sms://"))
{
// 将最前面的协议前缀删除
address = address.substring(6, address.length());
}
}
m_Conn.close();
m_Conn = null;
}
}
catch (InterruptedIOException ignore)
{
System.out.println("Done listening");
bIsParserOk = false;
sErrorParseDescription = "MessageConnection已经关闭!"
+ ignore.getMessage() +
"/" + ignore.getClass();
}
catch (IOException ioe) {
bIsParserOk = false;
sErrorParseDescription = "解析时发生I/O错误!"
+ ioe.getMessage() +
"/" + ioe.getClass();
}
catch(SecurityException se)
{
bIsParserOk = false;
sErrorParseDescription = "可能没有权限接收消息!"
+ se.getMessage() +
"/" + se.getClass();
}
catch (Exception exc) {
bIsParserOk = false;
sErrorParseDescription = "解析时发生错误!"
+ exc.getMessage() +
"/" + exc.getClass();
}
finally
{
m_Conn = null;
}
if(bIsParserOk == false)
{
notifyParseMMSError(sErrorParseDescription);
}
long lngStart;
long lngTimeTaken;
while(true)
{
try
{
if(m_midlet.controller != null)
{
if(m_midlet.controller.getDisplayMMSReady() == true)
{
// 当我们检测到控制器已经将“显示短信”Form初始化好了
// 就应该通知控制器短信内容了
break;
}
}
lngStart = System.currentTimeMillis();
lngTimeTaken = System.currentTimeMillis() - lngStart;
if(lngTimeTaken < 100)
Thread.sleep(75 - lngTimeTaken);
}
catch(Exception exc)
{
exc.printStackTrace();
}
}
////////////////////////////////////////////
// ThreadMMSHandler通知控制器已经解析出了消息
Object[] args = {text, address};
m_midlet.controller.handleEvent(GUIController.EventID.EVENT_DISPLAYMMS_SUCC,
args);
////////////////////////////////////////////
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -