⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadmmshandler.java

📁 J2ME程序实现开机自启动的简单例子源码。
💻 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 + -