由 setMeidatime() 想到的

来源:互联网 发布:淘宝卖的药是正品吗 编辑:程序博客网 时间:2024/04/29 10:50
关于设置播放时间, Player.setMediaTime() 所想到的。
各型号手机Bug总结
 
工作近一年,碰到的手机Bug也算千奇百怪了,总结一下:
Nokia S40
按键会有延迟,中断后原线程还会在后台继续运行直到调用repaint,内存开销不当会死机,其他bug尚未碰到,个人感觉应该是NokiaBug最少的机型啦。
 
Nokia 6600
Nokia官方Konwn Issuse已经确认调用readFully不能按指定字节数读取,解决方法Known Issuse上有,另外一种就是用readByte代替。setClipdrawRegion搭配在欧版6600上不能正确设置裁减框,导致绘图错误,港版无此问题,解决方法自己想。
 
Nokia 3650
6600一样,setClipdrawRegion搭配不能正确设置裁减框。3650频繁I/O操作会死机,应尽量在游戏初始化时将数据一次读入。
 
Nokia NG
这个型号CoCoMo最讨厌了,在背景缓冲上setClipdrawRegion搭配完全不能设置裁减框,解决方法自己想。声音播放有问题,建议在I/O操作等跟系统底层有关调用之后再播放声音,尚未解决。
 
Nokia 7610
drawRegion在这个机型上会拖慢速度,建议使用Nokia UI API上的drawImage。绘图函数调用不当会当机。
 
Nokia 6681
记得有篇blog写过了,其他bug尚未发现。
 
Moto V300
屏幕大小不是176 * 208,上面多了条状态栏,烦人,其他Bug未发现,较好移植。
 
Moto C650
字体大的吓人,setMediaTime该机型不支持,playerUpdate传过来的player是副本,所以应该用equal而不是==
 
Sone K700
除了屏幕220之外,最好移植的机型了,支持。
 
其他bug,遇到了再添
上面的一些 BUG 摘自网络。原文的出处。http://spaces.msn.com/j2medev/
这一段时间经过对手机游戏的移植,发现了大量的手机不支持这个标准的 setMidiaTime().轻则会抛出一个 MediaTimeException 异常,重则会把你的声音从头开始播放。这就导致了一个奇怪的问题,声音播放到一半的时候,碰到这个setMediaTime() ,声音立刻开始从头播放。尤其是一些不得不使用这个setMediaTime()的游戏。典型的音乐类游戏。增大了移植的难度。这些游戏根本就不可能移植。
这个问题不禁想到 j2me 的可悲之处。号称可以运行在任何平台上的 JAVA 在此处遇到了挑战。这也是 J2ME 的悲哀!就是手机的这个 BUG,让我郁闷了好几天。
setMediaTime
public long setMediaTime(long now)
                  throws MediaException
Sets the Player's media time.
For some media types, setting the media time may not be very accurate. The returned value will indicate the actual media time set.
Setting the media time to negative values will effectively set the media time to zero. Setting the media time to beyond the duration of the media will set the time to the end of media.
There are some media types that cannot support the setting of media time. Calling setMediaTime will throw a MediaException in those cases.
Parameters:
now - The new media time in microseconds.
Returns:
The actual media time set in microseconds.
Throws:
IllegalStateException - Thrown if the Player is in the UNREALIZED or CLOSED state.
MediaException - Thrown if the media time cannot be set.
See Also:
getMediaTime()
这个是 J2ME DOC 的帮助文档中的信息。由于本人英文水平太菜,稍微翻译一下,希望读者可以看个明白。原文翻译如下:/** 对于某些媒体类型而言,人为的设置播放的位置是不正确的。该方法返回的值指示出实际的播放时间的集合。设置播放时间为负值,会比设置播放时间为 0 值,更有效率。设置播放时间在播放的周期之内,也就是说比如这首音乐的播放时间是 30 秒中,而你设置音乐从第10 秒钟开始播放,会导致一个结果,就是相当于设置时间从第 30 秒钟开始播放。实际表现出来的就是没有声音播放出来,因为你已经把声音的播放位置设置了到最后。有一些媒体类型不支持 setMediaTime()。调用setMediaTime()会抛出一个 MediaException 异常。剩下的关于参数我想读者都会看的懂。毕竟搞手机开发的人,水平都不低,应该都比我的高………………哈哈。
现在我做最后的一些总结,结合机型谈一下
Motorola V300,E398,Sonyericsson K506 不支持 setMediaTime().调用之后就会抛出MediaTimeException 异常。
但是 Motorola E680确实支持的。
如果你使用这些手机调用getMediaTime()
结果这个方法在真机上返回的就是 –1
调用 getMediaTime()方法就会返回一个大于 1,000,000 的值,个人感觉这个值没有用。因为我在真机上试的时候分别使用了setMediaTime(20,000,000),setMediaTime(20,000),
setMediatime(2),setMediaTime(0),setMediaTime(-1).通通的试过之后,只有一个结果,就是声音从头开始播放。或者你的这个方法。根本就不起到任何的用处。
最后还有一个问题,想阐述一下。
假若现在只播放一个背景音乐。你只是调用 player.start(),player.stop();两个方法,实现声音的暂停和开始播放。理论上声音是不会从头开始播放的。但是实际上。在Sonyerisson K506 上,声音却从头开始播放。个人认为是暂停之后,对象player,根本就不会记录下,当前媒体播放的位置。只是把所有的播放信息置空。然后从头开始播放。
这篇文章希望能给你带来一些帮助。…………………… CCIT-Iceman
原创粉丝点击