📄 formmsgreceive.java
字号:
/**
//文档生成日期:2005.11.3
//
//(1)概述:
//类名称:FormMsgReceive
//类说明:
// 显示短信的Form界面
*
//所在子系统:MIMESMSnotifyPushRegistry
//
//系统总描述:
本工程发送一个MIME头的短信给目标手机。MIME头中指明了对方应该如何处理。
对方手机收到后,触发注册了PushRegistry的MIDlet应用,并解析短信,
按照指明的命令操作。
子系统描述:
注册Push Registry,监听sms://:8341,当然端口可以修改的。
这样,收到带有MIME头的短信后,解析并按照命令行事.
//(2)历史记录:
//创建人: 郑昀(2005.11.3)
//联系我: Google Talk >> zhengyun@gmail.com
//Blogs: http://blog.csdn.net/zhengyun_ustc/以及http://www.cnblogs.com/zhengyun_ustc
//(3)版权声明:
//我这个版本的MIMESMSnotifyPushRegistry,
//j2me客户端代码仅仅允许您借鉴,但不得用于商业用途,除非得到郑昀本人的授权。本人保留所有权利。
////////////////////////////////////////////////////////////////////*/
package com.ultrapower.view;
import java.io.InputStream;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.StringItem;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;
import javax.microedition.media.control.VolumeControl;
import com.ultrapower.common.CommandResources;
import com.ultrapower.control.GUIController;
import com.ultrapower.model.NonInteractiveGaugeRunnable;
/**********************************************************
//FormMsgReceive
//
//Class Description:
// 用于显示短信。提供“返回”按钮。
//
//Author:
//zhengyun@ultrapower 2005.11.3
//
**********************************************************/
public class FormMsgReceive extends Form implements PlayerListener{
private GUIController controller;
private Command BACK_COMMAND;
private StringItem mobileField;
private StringItem msgField;
private static Image m_imageGotIt =
CommandResources.getImage(CommandResources.IMG_GOTIT);
private int m_nImageAppendId = -1;
private NonInteractiveGaugeRunnable m_nonInteractive;
private int m_nAppendGaugeId = -1;
/*
* 下面是为了播放音乐准备的
*/
private Player m_player;
private VolumeControl m_volume;
private int m_nVolume = 50;
private static final Command m_cmdStop =
new Command("Stop",
String.valueOf(
CommandResources.getChars(CommandResources.TXT_C_STOPMUSIC))
, 6, 2);
private static final Command m_cmdPlayAgain
= new Command("Replay",
String.valueOf(
CommandResources.getChars(CommandResources.TXT_C_PLAYAGAIN))
, 6, 2);
public FormMsgReceive(String title, GUIController control){
super(title);
controller = control;
this.setCommandListener(new RssFeedAddListener());
BACK_COMMAND = new Command("返回",Command.BACK,1);
this.addCommand(BACK_COMMAND);
mobileField = new StringItem("对方手机号码:","");
msgField = new StringItem("接收到的消息内容:",
"");
this.append(mobileField);
this.append(msgField);
setTitle(String.valueOf(CommandResources.getChars(
CommandResources.TXT_T_PARSE_PROGRESS)));
}
/*
* 显示短信成功了
*/
public final void succReceive(String msg, String mobile)
{
stopPlayer();
System.out.println("/** Enter succSend!");
setTitle(String.valueOf(CommandResources.getChars(
CommandResources.TXT_PARSEMMS_SUCC_TITLE)));
mobileField.setText(mobile);
msgField.setText(msg);
m_nImageAppendId = this.append(m_imageGotIt);
// 添加停止播放音乐的按钮
StartMusicCommand();
// 呵呵,开始播放背景音乐
playMusic();
// 同时显示进度条
startGauge();
}
/*
* 受到消息之后就立即播放音乐,如果有任何错误,并不让用户知道
*/
private void playMusic()
{
try
{
// 读入文件流
InputStream isInputMusic = getClass().getResourceAsStream(
String.valueOf(CommandResources.getChars(
CommandResources.TXT_T_DEFAULT_MUSIC_FILENAME)));
if(isInputMusic != null)
{
m_player = Manager.createPlayer(isInputMusic,
"audio/amr");
// realize the player
m_player.realize();
System.out.println("Got player realize!");
// Guarantee that the player can start with the smallest latency.
m_player.prefetch();
System.out.println("Got player prefetch!");
// Set a listener.
//m_player.addPlayerListener(new PlayMusicListener());
// Grab volume control for the player.
// Set Volume to max.
m_volume = (VolumeControl)
m_player.getControl("VolumeControl");
if (m_volume != null)
m_volume.setLevel(m_nVolume);
System.out.println("Got VolumeControl!");
// 在單音序列播放器中不能使用prefetch()方法,否則會丟出MediaException
// Non-blocking start
m_player.start();
}
}
catch(Exception exc)
{
}
}
/*
* 显示短信失败了
*/
public final void failSend()
{
System.out.println("/** Enter failSend!");
setTitle(String.valueOf(CommandResources.getChars(
CommandResources.TXT_PARSEMMS_ERROR_TITLE)));
clear();
stopPlayer();
resetPlayer();
}
public void clear(){
mobileField.setText("");
msgField.setText("");
if(m_nImageAppendId != -1)
this.delete(m_nImageAppendId);
if(m_nAppendGaugeId != -1)
this.delete(m_nAppendGaugeId);
}
/*
* 播放音乐的一系列函数
*/
public void playAgain()
{
System.out.println("/** PlayAgain!");
try
{
if(m_player != null)
{
if(m_player != null && m_player.getState() == Player.PREFETCHED)
{
m_player.start();
}
}
startGauge();
removeCommand(m_cmdPlayAgain);
addCommand(m_cmdStop);
}
catch(Exception exc)
{
exc.printStackTrace();
}
}
/*
* 在本界面关闭的时候,将Player关闭
*/
public void destroyPlayer(){
try{
stopPlayer();
}catch(Exception e){
e.printStackTrace();
}
}
/*
* 本类实现了PlayerListener接口。通过这个事件来告知媒体已经播放完毕
*/
public void playerUpdate(Player player, String event, Object data){
if(event == PlayerListener.END_OF_MEDIA){
try{
stopPlayer();
StopMusicCommand();
}catch(Exception e){
e.printStackTrace();
}
}
}
void stopPlayer(){
try{
defplayer(false);
stopGauge();
}catch(Exception e){
e.printStackTrace();
}
}
/*
* 暂时停止播放
*/
public void pausePlayer(){
try{
defplayer(true);
}catch(Exception e){
e.printStackTrace();
}
}
public void resetPlayer(){
m_player = null;
}
/*
* defplayer的功能就是:
* 如果输入参数pause为true,那么,如果播放中,则先停止播放;
*
* 如果输入参数pause为false,那么,如果播放中,则先停止播放;如果player是在预载入中,则清除player占用的内存;
*/
void defplayer(boolean pause) throws MediaException{
if (m_player != null){
if(m_player.getState() == Player.STARTED){
m_player.stop();
}
if(m_player.getState() == Player.PREFETCHED && !pause){
m_player.deallocate();
}
if((m_player.getState() == Player.REALIZED || m_player.getState() == Player.UNREALIZED) && !pause){
m_player.close();
}
}
if(!pause){
m_player = null;
}
}
/*
*
*/
public final void StartMusicCommand()
{
System.out.println("/** Enter StartMusicCommand!");
addCommand(m_cmdStop);
}
/*
* 删除停止命令,添加重放命令
*/
public final void StopMusicCommand()
{
System.out.println("/** Enter StartMusicCommand!");
removeCommand(m_cmdStop);
addCommand(m_cmdPlayAgain);
}
/*
* 进度条的函数
*/
public void startGauge()
{
if(m_nonInteractive == null)
{
m_nonInteractive = new NonInteractiveGaugeRunnable(
"播放中...", 10, 0);
new Thread(m_nonInteractive).start();
m_nAppendGaugeId = this.append(m_nonInteractive);
}
else
{
m_nonInteractive.setValue(0);
m_nonInteractive.setStart();
}
}
public void stopGauge()
{
m_nonInteractive.setDone();
if(m_nAppendGaugeId != -1)
this.delete(m_nAppendGaugeId);
}
/*
* 内部监听器,监听器监听所有Command事件,并把事件响应推出来让控制器处理
*/
private class RssFeedAddListener implements CommandListener{
public void commandAction(Command command, Displayable disp){
if(command == BACK_COMMAND){
controller.handleEvent(GUIController.EventID.EVENT_DISPLAYMMS_BACK, null);
}
else if(command == m_cmdStop)
{
// 停止播放音乐
StopMusicCommand();
pausePlayer();
}
else if(command == m_cmdPlayAgain)
{
// 重新播放音乐
playAgain();
}
}
}//end inner class
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -