`
阿尔萨斯
  • 浏览: 4179633 次
社区版块
存档分类
最新评论

"用户界面和多媒体"版面问题[二][j2medev][0406更新]

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

第一部分在"用户界面和多媒体"版面问题整理[j2medev.com][不断更新中]。下面是后续更新的部分。

全部目录为:

1 全屏问题
2 Image和ByteArray转换问题
3 getRGB问题
4 字符串换行问题
5 字体问题
6 重新播放音乐问题
7 MediaException问题
8 混音问题
9 CustomItem问题
10 Nokia播放Tone音乐问题

6 重新播放音乐问题

player/stop/start

关键词

详细描述

音乐停止播放后如何从起始位置重新播放?

“如果你的音乐自己播放完毕了,而用户手动提交命令要求重新播放,那么你可以直接调用player.play()即可。或者一开始播放音乐的时候就利用player.setLoopCount设定循环播放次数。

如果你希望音乐自动重新播放,那么就必须实现“播放器状态更新事件”:

以下内容为程序代码:

// 绑定状态更新事件过程

player.addPlayerListener(this);

/*

* 本类实现了PlayerListener接口。通过这个事件来告知媒体已经播放完毕

*/

public void playerUpdate(Player player, String event, Object data){

System.out.println("Enter playerUpdate>>" +

event);

if(event == PlayerListener.END_OF_MEDIA){

try{

....

}catch(Exception e){

e.printStackTrace();

}

}

else if(event == PlayerListener.STOPPED)

{

System.out.println("playerUpdate>>PlayerListener.STOPPED");

}

else if(event == PlayerListener.STARTED)

{

System.out.println("playerUpdate>>PlayerListener.STARTED");

}

}

--- zhengyun

SonyEricsson

K750手机上无法实现暂停,续播功能?

“发觉在索爱K750手机上无法实现暂停,续播功能。该功能在MOTO,NOKIA手机上可以使用。”

--trysunset

7 MediaException问题

player/stop/start

关键词

详细描述

播放MIDI时,真机上会爆出MediaException

异常,而在其他机器上可正常播放MIDI?

“is = getClass().getResourceAsStream("/title.mid");

if (is != null)

{

player_ = Manager.createPlayer(is, "audio/midi");

player_.setLoopCount(-1);

player_.start();

}

这个代码是我用来监测一款机器用的,在播放MIDI时,其真机上会爆出MediaException异常,而在其他机器上可正常播放MIDI

有意思的是这个代码用来播放WAV则是正常的,由于该PDA机自带播放器,我将MIDI直接传入其中播放时可以播放的,所以应该不会有MIDI格式不兼容的问题!

--- imtrash

虚拟机不支持MIDI的播放!我用过的NOKIA6630的手机就是这样的!

--- zgly

你可以将虚拟机可以播放的音乐类型用下面的代码

public void showForm() {

String[] protocols, contentTypes;

protocols = Manager.getSupportedProtocols(null);

for (int i = 0; i

contentTypes

= Manager.getSupportedContentTypes(

protocols[i]);

for (int j = 0; j

m_errForm.append(protocols[i] + ":" + contentTypes[j]);

}

}

}

将信息显示在一个FORM里!

--- zgly

必须明确的一点是,我们的MIDlet是运行在Java ME平台环境下的。 不一定设备提供的功能在Java ME平台都得到了实现!

--- mingjava

在真机测试中,

Nokia7610弹出一个错误:

javax.

microedition.

media.

MediaException: -18

“很明显是nokia 7610上不支持这种媒体格式设置media time,所以抛出了MediaException

p.setMediaTime(5 * SECS_TO_MICROSECS);删除即可”

-- mingjava

error opening MIDI/tone device”或“fail in writing data to native”?

“播放MIDI的代码在k7006600上都没问题,在moto上不知道怎么回事却报如下异常:

javax.microedition.media.MediaException:

fail in writing data to native

e680i的模拟器仍然会报错,

不过报出来的是:

javax.microedition.media.MediaException:

error opening MIDI/tone device

at com.sun.mmedia.MIDIPlayer.doPrefetch(+19)

at com.sun.mmedia.BasicPlayer.prefetch(+34)

最后找到原因了,moto的机器不能同时有两个midiplayerprefetch()中,即使前面那个player并没有执行start(),后面生成player都会在prefetch()start()的时候产生上面的异常!

因为我有一个midi player一直在prefetch状态,所以新生成的midiplayer都不能start().

真是个奇怪的现象阿,在其他手机上都不会有这个问题。”

---saltedfish

8 混音问题

player/mixer

关键词

详细描述

Moto真机上如何在播放背景音乐的时候再播放音效?

“摩托罗拉V300-V500-V600同时播放音乐的讲究:

唯一支持的同步播放音乐的办法是,midiwav声音混合播放。

即使是这样,也存在着一个限制:

应用程序必须先播放midi(可以作为背景音乐),然后再播放wavwav文件还必须是以下的格式:

PCM 8000KHZ

8Bit

Mono

除了上面这种方法,只要是一个新的media被播放,上一个Player必须被停止而且释放资源。”

--moto文档

MOTO系列手机中JAVA程序播放一个声音文件比较简单,但是用于交互式音效时就有问题了。

根据MOTO的一些资料显示,在MOTO手机中播放声音有下面几条约束:

1、除了同时播放一个MIDI和一个WAV以外,MOTO手机无法同时播放多个声音,而且必须是先播放MIDI然后播放WAV

2、除了MIDI或音阶序列以外,不能同时实现player的多个实例进入prefetched状态(预读取声音流);

3、播放新的声音之前,前一个player必须停止并释放资源(stop();deallocate())。

如果你遇到以下问题,可以试试我的解决方法:

1)只能播一次,或几次,接着就无法发出声音;

2)播放新的声音时,总是会多播放一次前一个声音。”

---linchangyu

nokia6230i上的MediaException现象

“当一个Playerprefetched,那么其他Player也就不再能够prefetched,除非它们都是midi或都是amr

如果你没有在start/prefetch一个Player之前把其他的Player停下来,那么你将得到一个MediaException。”

-- 无名

9 CustomItem问题

CustomItem/repaint/traverse

关键词

详细描述

CustomItemrepaint

repaint()产生重绘事件,在CustomItem里它有两个同名的方法,其中一个有四个参数,用来指定重画区的起始XY坐标,宽度和高度;另外一个没有参数,表示重画CustomItem的整个区域。paint()方法里的后两个参数也是宽度和高度,但是这两个方法的宽度和高度没有任何联系, paint方法里的WHItem内容区域的宽度和高度,并且只有这两个值大于0时,paint()方法才会被调用。”

--mydeman

repaint()被调用之后会立刻返回,而调用paint()回调函数的工作会有另外一个专门处理UI的线程来完成。因此如果希望得到paint()方法完成后再返回,那么就可以在repaint()之后立刻调用serviceRepaint(),来强制队列中重绘事件快点完成。”

--- mydeman

CustomItem上处理过左右上下方向键

“由于我的CustomItem控件和一个Gauge控件同处于一个Form上,所以按上下左右键的时候,实际上被Form处理了,Form就认为上下左右键是在切换控件的焦点,而不会把这个按键事件传给我的CustomItem了。也就是说,我的写法一样不会得到上下左右键的按键事件。”

-- zhengyun

“一部手机是否实际支持CustomItem internal traversal,需要向getInteractionModes()方法查询才可知道,因为这是隐含的策略,并不是一定的。听说,在Nokia真机上,traverse好像并不好使用。

在我这里,这段代码在模拟器上能够使用,在真机上我不敢保证:

以下内容为程序代码:

protected boolean traverse(int dir,int viewportWidth,

int viewportHeight,int visRect_inout[])

{

System.out.println("Enter traverse");

if(dir == Canvas.UP){

System.out.println("traverse>>Press Up key!");

return true;

}else if(dir == Canvas.DOWN){

System.out.println("traverse>>Press Down key!");

return true;

}else if(dir == NONE){

System.out.println("traverse>>Press None key!");

return true;

}

return false;

}

protected void traverseOut(){

System.out.println("Enter traverse out");

}

-- zhengyun

protected boolean traverse(int dir, int viewportWidth, int viewportHeight, int[] visRect_inout) {

switch (dir) {

case Canvas.DOWN:

if (location == UPPER) {

location = IN;

} else {

repaint();

location = LOWER;

return false;

}

break;

case Canvas.UP:

if (location == LOWER) {

location = IN;

} else {

repaint();

location = UPPER;

return false;

}

break;

case Canvas.LEFT:

System.out.println("LEFT");

break;

case Canvas.RIGHT:

System.out.println("RIGHT");

break;

}

return true;

}

实际上在FORM里的左右键事件,也被用来处理焦点,只不过在CUSTOM ITEM里左右键没有响应,用上下键来处理焦点事件了。”

---hebaochen

10 Nokia播放Tone音乐问题

Sound/

关键词

详细描述

按键,音乐被中断

“在Nokia 3650,7650上使用Tone播放声音,如果用户一按键,那么音乐马上被中断。这个问题是已经在Nokia官方开发论坛上得到确认。是Symbian 6.0系统上的一个bug,Symbian 7.0系统的手机(Nokia 7610,6600)上没有这个问题,Nokia 40上也没有这个问题。

解决之道:这是系统的bug,只有使用其它方式的音乐播放,比如midi格式音乐,否则是没有办法的。”

--二当家的




分享到:
评论

相关推荐

    J2MEDev电子期刊5月号PDF版

    J2ME开发环境达建................................................................................................................2 Eclipse快速上手指南.....................................................

    [特效研究]j2medev论坛里提到的一个显示特效实现

    NULL 博文链接:https://univasity.iteye.com/blog/615238

    J2ME Game Programming

    本书介绍了J2ME游戏开发基础,以MIDP2为主。 http://www.j2medev.com/ebook/j2me/200605/710.html&lt;br/&gt;http://www.j2medev.com/ebook/UploadSoftPic/200605/20060531093745896.jpg

    J2ME API 速查手册0.7

    本手册由www.j2medev.com整理制作而成。手册中相应图片、图表、文字的版权归原作者所有。你可以分发本手册的拷贝,但请保证其内容的完整性。www.j2medev.com对于使用本手册造成的任何损失,概不负责。 本手册0.7...

    移动 JAVA 3D 编程基于CLDC的MIDP技术

    J2ME开发网(www.j2medev.com)是国内发展势头很猛的J2ME技术的垂直门户。J2ME 开发网广泛的覆盖了基于CLDC的MIDP技术,并将逐步扩展到CDC方面。J2ME提供最新的 原创文章,促进开发者的技术交流;提供丰富的资源下载...

    MEDEV_TPGO:移动中的 MEDEV 实际工作

    MEDEV_TPGO测试覆盖率TestGroupe 文件用于测试组类的不同方法。 但是,我遇到了一个 Git 问题,这迫使我将其移至源代码。 此外,我在使用 include 时遇到了问题。 移动中的 MEDEV 实际工作我总是忘记的有用 git 命令...

    JavaME中文教程pdf

    本教程由J2ME开发网(www.j2medev.com)的网友集体创作。任何人未经J2ME开发网的书 面许可,不得将本教程用于商业目的。本教程受到版权法的保护。盗用、截取教程中的文字、 图形、表格都将视为非法。如未标明,则...

    Better Faster Lighter Java

    Tate &lt;br/&gt;下载网址: http://www.j2medev.com/ebook/jese/200605/701.html&lt;br/&gt;&lt;br/&gt;书籍图片: http://www.j2medev.com/ebook/UploadSoftPic/200605/20060531090149545.jpg&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Java 的...

    J2ME中文教程-J2ME 开发网

    本教程由J2ME开发网(www.j2medev.com)的网友集体创作。任何人未经J2ME开发网的书 面许可,不得将本教程用于商业目的。本教程受到版权法的保护。盗用、截取教程中的文字、 图形、表格都将视为非法。如未标明,则...

    程序员常去的网站

    程序员常去的100个网站! 1 J2me开发网 http://www.j2medev.com/bbs/index.asp 2 J2me社区 http://www.j2meforums.com/forum/

    MVC模式在j2me项目中的应用

    2)和www.j2medev.com有转载文章合作协议的3)通过Rss聚合我的Blog。另外网上转载需要全文转发(包括文章的头部的声明),不要断章取义。 正文: 初识MVC模式 第一次认识到MVC模式是从MicrosoftMFC框架所

    手机背单词软件

    两,三年前自己写的一个小程序,曾经放到j2medev上 :) 最近换手机发现还能用!网上也还有人用,于是再放到上来。 &lt;br&gt;程序没有改动,单词 a-z 词库 4-6 级, 对大学同学还是有一定帮助的。 功能:单词...

    j2me 中文教程 开发环境 J2ME语言

    J2ME 中文教程 by www.j2medev.com MIDlet 程序的机制。 第十章“MIDlet 的开发流程与部署”介绍了如何真正完成你的程序并打包发往设备运行。 第十一章“搭建开发平台—WTK”主要讲述J2ME 新手最常使用的开发工具...

    MSDEV 历史信息清除

    显示Medev的历史信息,并清除所选定的信息。

    J2ME中文教程

    第九章“MIDP 2.0 Push 技术”介绍了如何通过异步方式将信息传送给设备并自动启动J2ME 中文教程 by www.j2medev.comMIDlet 程序的机制。 第十章“MIDlet 的开发流程与部署”介绍了如何真正完成你的程序并打包发往...

Global site tag (gtag.js) - Google Analytics