旁观者

参与软件开发这些年来,不断地遇到新领域新知识点,屡屡感受到新进入者的迷惑和彷徨,所以对遇到的每一个问题都详细记录问题现象、解决思路以及解决方案,并在blog中留下印迹,以备他日有心人google之而知之。
你们的新手之痛,你们的新业务发展之初的思路混沌,我都感同身受,所以欢迎和我一起探讨这些话题,诸如Semantic/NLP/Mashup/J2ME/IVR/SMS/WAP/Python等,知无不言言无不尽。
posts - 538, comments - 970, trackbacks - 39, articles - 1
   ::  ::  ::  :: 订阅 订阅 :: 管理

 

郑昀@ultrapower

产品名称

产品版本

Keyword: Mobile 传情动漫 Wink MSN Messenger  Media 媒体播放 j2me midp2.0

WMA PushRegistry

PopupWinks

Mobile

0.0.1 BETA

手机也能玩转MSN传情动漫!

J2ME实作

摘要:

本文档并不是一个关于PopupWinks On Mobile Kjava版本的开发说明,这里只是一个总入口。我将给出手机传情动漫的奇异特性、用户使用说明,以及演示程序下载地址;并且给出开发指导的相关链接。慢慢看下去,你会大有收获的。

 源代码下载:
http://files.cnblogs.com/zhengyun_ustc/MIMESMSSender.rar,是下面说的传情动漫的发起方代码。
http://files.cnblogs.com/zhengyun_ustc/MMSAutoLoader.rar,就是下面那个根据手机发送方发送的短信而在接收方手机上演示动画和音乐的javaME代码。

1背景、功能和特别之处

摘要:本章 简单描述PopupWinks On MobileKjava版本的背景、功能和特别之处。

 

1.1. MSN的传情动漫可不可以在手机上点对点实现呢?

诚如这个标题所言,你有没有梦想过你的MSN传情动漫能够在手机上实现呢,点对点,或者PC机对手机?

没有?!

那么,让我给你描绘这么一幅绚丽的画面吧:

 

你的亲爱的她,总是在MSN Messenger 7.0上给你传情达意,那些搞怪的弹出式动画总是让你乐不可支:


    那些恐怖的也总是让你惊得七荤八素:


    那么,你能不能从你的手机上发个信息过去,她的手机上咣当一下子自己出来一个动画,还带着骇人的音效,你说酷不酷!?

要么,你从PC机的MSN Messenger 7.0上发送给在移动设备上登录的她一个传情动漫,结果她的手机立马跳出一个大Kiss,还带着“momo…”声!

能这样吗?不需要她的主动介入,手机自动显示传情动漫?

 

我的答案是,能!JavaME可以帮你做到这一点!我提供这个平台,动画素材你就可以自由加入了。甚至于采用JVending的思路,如果对方手机上没有相应的动画,那么对方手机收到你的命令之后,可以按照包头中指定的Internet资源自动走GPRS下载素材。

不是吧,你说的这不就是彩信吗?我告诉你,彩信可是需要她按了确认之后,才出来的。而我们要的是那种出人意料的Coolala的效果!这种效果在彩信框架下面可是作不到的。

 

1.2.PopupWinks On Mobile是什么东西?

到了现在,我们必须明确定义PopupWinks On Mobile是什么东西了。

答,

PopupWinks,简单地说,是MSN传情动漫(Winks)在手机上的实现。

从技术上讲,就是在手机上截获对方手机传过来的消息(可能是二进制消息甚至本身就是多媒体消息,可能是纯文本消息),根据消息所隐含的命令自动播放动画和音乐。不过,如果让运营商营业厅的小姑娘和老百姓讲技术,真是如鸡同鸭讲。技术上的进步,并不能涵盖其全部的意义。

通俗的讲,就是你用我的PopupWinks程序给她发送一个短信,她的手机也安装了这个PopupWinks软件,那么她的手机会在短信到达的第一时间处理此条短信,按照短信命令展示动画和音效,而这些素材也许在她的手机PopupWinks中已经安装了,就像MSN Messenger自带了几个传情动漫一样;也许需要从Internet下载。

未来我们希望能够集成到MSN Messenger上,这样你可以从PC机上发送命令,让手机立马显示传情动漫。


    比如啊,给她来一个:


    也许看到这里的时候,你很试试看了或者想自己动手写一个。

那么,如果你是JavaME技术人员,不要错过下面这个章节哦。如果你是普通用户或者产品人员,那么可以跳过这两个章节,直接到 特性展示和使用说明。

1.3. PopupWinks On Mobile的实现原理简介

我们提供的PopupWinks On Mobile KJava版本 就是这么一种实现方法,WMA+Push Registry,这些都需要你的手机是MIDP2.0。为了厘清概念起见,我们把收发程序彻底分开来,这样便于你的理解,我也容易演示。

 

发送客户端,我们命名为“MIMESMSSender(点击下载)

手机客户端MIMESMSSender,主要用来调用JSR120所定义的Wireless Messaging API (WMA)发送短消息,目前定义它发送的是文本消息,实际上可以发送特定格式的二进制短信,这样就和JVending一样做到加入MIME头,指明资源类型以及打开方式等等了,这样你可以自定义交互的协议格式了。



    接收客户端,我们命名为“
MMSAutoLoader(点击下载)

手机客户端MMSAutoLoader,一方面通过JSR118所定义的Push Registry向手机申请注册自动启动功能,另一方面当有特定短信被手机收到后,自动启动,并按照命令显示图像并播放大长今主题曲,呵呵:


 

这么着,收发,是不是容易搞清楚了呢?

接下来,你需要研究我编撰的用于帮助理解WMAPush Registry关键技术的样例代码了,注意它并不是前面图片所演示的代码。

请下载http://files.cnblogs.com/zhengyun_ustc/WMASimpleSend.rar,这是一个很简单地利用WMA发送短消息的工程,导入到Eclipse后,运行即可,已经在真机上测试通过了。除了有可能遇到短信内容乱码问题之外,我相信你不会有任何疑问,所有的调用一望而明。

 

然后是Push Registry,这也是MIDP2.0才支持的特性。

请下载http://files.cnblogs.com/zhengyun_ustc/SimplePushRegistry.rar,这是我编写的非常简单的例子,叫做“PushRegistry和短信联动演示”。她提供了两个命令“注册短信监听”和“取消短信监听”。

注册短信监听,则调用

PushRegistry.registerConnection(connURL,

                                                        MIDletStr, FilterStr);

来向手机申请专门监听某一个端口,这个端口可以是各种协议,

可以是蓝牙的btspp://:

也可以是短信的sms://:

还可以是套接字的socket://:

总之,未来你的手机甚至可以变成BT下载的一个种子提供者。

我这里是用的是动态注册,还有一种办法是在jad文件中写明注册方式,这叫做静态注册。一般是推荐静态注册,那样的话,在用户安装你的软件时,就会提示用户是否要注册自动启动功能,这样更方便一些,是推荐的做法。

 

好了,学习完了关键技术,你是不是也能做出来Jvengding一样的移动内容发布和管理系统呢?嗬嗬。你不妨去他们那里看看:

http://sourceforge.net/projects/jvending

http://jvending.sourceforge.net/

http://jvending.sourceforge.net/jvending_logo.gif

。当然也不要忘记我的手机传情动漫。

1.4. 哪些手机支持这种PopupWinks呢?

简单地说,只要你的手机说明书中有这么一句话即可“ProfileMIDP-2.0”。

比如,都有这么一些手机支持:

诺基亚 3220;诺基亚 5140;诺基亚 6020

诺基亚 6101;诺基亚 6600;诺基亚 7610

诺基亚 8800

摩托罗拉 A668;摩托罗拉 A768

摩托罗拉 E398;摩托罗拉 E680

摩托罗拉 V220;摩托罗拉 V80

等等等等。近一年来上市的手机肯定支持MIDP2.0标准。

1.5. 特别之处

下面,我们说说这个应用程序的特别之处。

l         这个应用程序的总体思路其实很简单,由WMAPush Registry配搭即可。

l         MVC的类分解,采用了 mingjava 的思路。

l        RMS记录存储的封装模式以及对资源的调用方式,则参照了索爱公司的BlueGammon游戏代码。

l         对背景音乐的播放,还是参考了我的最初文章《[J2ME]手机也可以玩播客(Podcast)! Geek客说明。相应的toodouPodcast Kjava版的源代码可以从

http://files.cnblogs.com/zhengyun_ustc/toodouPodcastMidlet.rar 下载。

 

对于MVC的类分解,你还可以参考我的另一篇文章《[J2ME]RSSOwlMidlet(RSS无线阅读器)设计说明》以及《[J2ME]VideoCoolala设计说明》

BlueGammon游戏源代码,你可以从

http://files.cnblogs.com/zhengyun_ustc/Bluegammon-eclipse.rar 下载。

1.6. 小结

其实,短信到了我们这里,就已经不是短信了。因为第一,它已经被我的程序读走了,所以你不会在短信收件箱中看到它;第二,短信其实可以是二进制短信,能够加入很多Header,就像MIME邮件格式一样。所以PopupWinks On Mobile做到了这种境界:

我轻轻的招手,

     你的手机跑满西天的云彩。

动漫里的艳影,

    在你的心头荡漾。

悄悄的我走了,

     正如我悄悄的来;

   我挥一挥衣袖,

     不带走一片云彩。

 

我希望这个PopupWinks On Mobile将来能够做到像我经常强调的一样:

最希望软件带给用户的感受是:美好的体验、舒适感、简约、干净...

2 演示程序使用说明

       2.1. 安装MMSAutoLoader并注册自动启动功能

首先,请您安装MMSAutoLoader中包含的jar包到手机中,然后打开该程序,您将看到


    的主界面。

请选择“注册自动启动功能”命令,进入界面后,您将看到:


    选择菜单命令“推动功能注册”,即可使这个
MMSAutoLoader程序能够监听特定短信并自动启动。

然后关闭本应用即可。

       2.2. 安装MIMESender并注册自动启动功能

首先,请您安装MIMESender中包含的jar包到手机中,然后打开该程序,您将看到:


    请进入“发送消息”界面,填写好对方手机号码以及消息内容,选择“发送”命令即可。

对方(她已经安装了MMSAutoLoader并注册了自动启动)收到你的短信后,就会立刻激活MMSAutoLoader,演示动画以及播放大长今背景音乐。

 

3 资源

我的PopupWinks On Mobile资源:

1手机也可以玩MSN传情动漫 J2ME实作

2:下载midletMIMESMSSender ,大约21KBMMSAutoLoader,大约62KB

 

郑昀@ultrapower

产品名称

产品版本

Keyword: Mobile 传情动漫 Wink MSN Messenger  Media 媒体播放 j2me midp2.0

WMA PushRegistry

PopupWinks

Mobile

0.0.1 BETA

 

 

4 历史更新

暂无。

 

Feedback

#1楼[楼主]  回复 引用 查看   

2005-11-04 18:26 by 让变化成为计划的一部分      
其实实现的技术很简单,只要下载了
这两个例子程序,跑一遍,想想就能做出来了,呵呵。希望对大家有所启发。
http://www.cnblogs.com/Files/zhengyun_ustc/SimplePushRegistry.rar,SimplePushRegistry.rar.
http://www.cnblogs.com/Files/zhengyun_ustc/WMASimpleSend.rar,WMASimpleSend.rar.

我还是建议大家看看JVending的实现方式,虽然她的技术和我的不一样,而且在手机这一端只是做了MMS解码的工作。

#2楼  回复 引用   

2005-11-05 20:38 by jd2bs[未注册用户]
兄弟狠有想法啊 ...有创意, 不错不错...
有机会多交流...

#3楼[楼主]  回复 引用 查看   

2005-11-07 18:32 by 让变化成为计划的一部分      
发送特定端口短信的MIDlet源代码可以从http://www.cnblogs.com/Files/zhengyun_ustc/MIMESMSSender.rar
下载。

#4楼  回复 引用   

2005-11-08 15:45 by 米兰[未注册用户]
下载你的http://www.cnblogs.com/Files/zhengyun_ustc/WMASimpleSend.rar
运行会出错,发送可以,为什么接受不了,还是我没操作对?

#5楼[楼主]  回复 引用 查看   

2005-11-08 23:45 by 让变化成为计划的一部分      
WMASimpleSend.rar
里面的代码并不是演示接收短信的。

真正能跑起来的代码是我的另外一个例子MMSAutoLoader。
如下所示:
/*
* 解析消息,从而得到消息的正文以及源号码
*/
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;
}
}

#6楼[楼主]  回复 引用 查看   

2005-11-08 23:47 by 让变化成为计划的一部分      
等我完成了传情动漫的解析后,就会公布MMSAutoLoader的代码。

#7楼  回复 引用   

2005-11-09 08:56 by 米兰[未注册用户]
MMSAutoLoader可以跑起来,期待你的完善代码。
老乡搞得很不错啊,支持一把!多多交流!

#8楼  回复 引用   

2005-11-09 13:23 by Limpid[未注册用户]
老兄,强啊,学习一下

#9楼[楼主]  回复 引用 查看   

2005-12-21 17:56 by 让变化成为计划的一部分      
http://www.cnblogs.com/Files/zhengyun_ustc/MMSAutoLoader.rar,已经可以下载了,就是上面那个根据手机发送方法送的短信而在接收方手机上演示动画和音乐的javaME代码。

#10楼  回复 引用   

2006-07-10 10:17 by drhu00[未注册用户]
实际上许多运营商都把PushRegistry给关闭了,跟本无法注册。See
http://forum.java.sun.com/thread.jspa?threadID=743863

#11楼[楼主]  回复 引用 查看   

2006-07-10 11:17 by 让变化成为计划的一部分      
我想你是误会了。注册push registry监听5000端口,是和运营商没有任何关系的。这仅仅是你的手机的功能,还谈不上和运营商扯上关系。

利用本文提供的代码和jar,是可以监听5000端口,并且发送短信给5000端口,确实能够将程序激活的。我已经试验过了。

#12楼  回复 引用   

2006-07-11 06:27 by drhu00[未注册用户]
I got the following errors when I try your MMSAutoLoader
SecurityException: javax.microedition.io.PushRegistry was denied.

It happens when I file EventID.EVENT_REGISTER_REG of GUIController.java.

I am in US and the 运营商 is T-Mobile. From one of the post in google,
http://www.experts-exchange.com/Programming/Wireless_Programming/Q_21823573.html
it seems that T-Mobile disabled several API.

BTW, when you online? My yahoo and MS login is drhu00, can we have a talk?

#13楼[楼主]  回复 引用 查看   

2006-07-11 18:27 by 让变化成为计划的一部分      
本页面的左栏上有我的msn联系方式。

我觉得还是不要急于下结论的好。
摩托罗拉手机如果确有问题的话,不妨试试看Nokia的手机。
我在Nokia和索爱手机上测试过。摩托罗拉的,我可以回去试试看。

#14楼  回复 引用   

2007-04-09 11:42 by 宝山[未注册用户]
老兄,能否告知蓝牙怎么在手机上实现?

#15楼[楼主]  回复 引用 查看   

2007-04-09 18:53 by 让变化成为计划的一部分      
to 宝山:
这个随便搜索就一大把内容,很多文章的。
使用Java蓝牙无线通讯技术API(第一部分-API概览)(2)蓝牙控制中心(BCC)是设备上的一个管理软件,它负责在作为授权中心改变本地蓝牙的设置,包括:打开或关闭蓝牙无线电,设置友好名称以便在设备发现过程中进行广播,开启或屏蔽设备的发现模式,设置PIN码,设置缺省安全属性等等。BCC看上去表现如何全看 ...
www.j2medev.com/Article/ShowArticle.asp?ArticleID=249 - 22k - 网页快照 - 类似网页

#16楼  回复 引用   

2007-04-17 20:40 by 爱玛[未注册用户]
你好!不知道这个PushRegistry能不能实现游戏中调用运行另外一个游戏呢?
我想实现像联众一样的在主界面下载游戏或运行游戏的功能
MIDLET可以由短信唤醒,
难道就不能被另一个MIDLET唤醒吗?
请提点,谢谢~

#17楼[楼主]  回复 引用 查看   

2007-04-18 01:06 by 让变化成为计划的一部分      
请看
http://www.j2medev.com/bbs/dispbbs.asp?BoardID=17&ID=6489

#18楼  回复 引用   

2007-09-11 11:10 by hellojack[未注册用户]
当从发送端向接收端发送sms后,接收端总要显示“需要时允许自动启动应用程序MMSAutoLoader Midlet Suite? ”然后点击“是”才能激活Midlet,能不能做到不显示这个对话框直接就启动Midlet???

#19楼[楼主]  回复 引用 查看   

2007-09-11 17:41 by 旁观者      
1:
如果接收端的手机任何操作都不作,而要求不弹出警告框,只有对应用程序签名做认证了。
2:
如果没有认证,那就只好委屈接收端手机专门去手机的程序管理里,设置这个MMSAutoLoader 程序只在第一次自动启动应用程序的时候提示以后不再提示。这样只提示一次。
3:
否则,警告框是无法回避的。
呵呵,问一个问题,是否可以采用监听手机系统接受普通短信息端口的方式来运行你的MMSAutoLoader,对短信内容进行有效解析之后,Loader也许就可以变成一个短信接受程序,只不过可以增加一些声色功能,这样就可以让这个应用变得更易于让大众接受。
有空可讨论一下……

#21楼  回复 引用   

2007-10-15 14:49 by 泡芙[未注册用户]
请问楼主WMA可以接收wap push的短信吗?