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

news/2024/7/5 23:24:01

第一部分在 "用户界面和多媒体"版面问题整理[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 < protocols.length; i++) {

            contentTypes

= Manager.getSupportedContentTypes(

protocols[i]);

            for (int j = 0; j < contentTypes.length; 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格式音乐,否则是没有办法的。”

--二当家的

 

 

 





http://www.niftyadmin.cn/n/3649746.html

相关文章

手机用户界面和多媒体版面有价值问题整理[j2medev.com][0406更新]

预告&#xff1a;j2medev.com将开始整理各个版面的有价值问题&#xff0c;并以PDF格式集结&#xff0c;敬请期待。出品商产品名称产品版本J2medev.com版面有价值的问题合集0.1j2medev.com之“用户界面和多媒体”版面有价值问题的整理历史VersionDateCreatorDescription1.0.0.12…

golang init_了解Go中的init

golang init介绍 (Introduction) In Go, the predefined init() function sets off a piece of code to run before any other part of your package. This code will execute as soon as the package is imported, and can be used when you need your application to initial…

MIDP设计模式之集结贴[JavaME]

1:架构性宣言: MIDP 2.0 中的工厂设计模式如何使用 MIDP 的 Generic Connection Frameworkhttp://www-128.ibm.com/developerworks/cn/java/wi-arch22/ 级别: 初级Mikko Kontio, 产品经理, Softera2006 年 3 月 13 日这个月将学习有关 MIDP 2.0 的更多知识&#xff0c;同 Mikko…

计网笔记--网络层

1--网络层概述 网络层主要问题&#xff1a; ① 网络层向运输层提供怎样的服务&#xff1f; &#xff08;可靠或不可靠&#xff09; ② 网络层寻址问题&#xff08;IP 地址&#xff09; ③ 路由选择问题 &#xff08;路径&#xff09; 重点在于&#xff1a;TCP/IP协议栈 2--网络…

Flutter:如何使用WebView插件

Displaying webpages inside of your Flutter applications is easy with the use of the WebView plugin. In our example application, we’ll look at how to create a custom Widget that can be used throughout our application to launch a WebView from anywhere. 显示…

[J2ME]手机流媒体之实作[附源码][与RTSP/MMS协议无关]

郑昀ultrapower产品名称产品版本Keyword: JavaME Streaming Audio MMAPIStreamingDemo1.0.13[J2ME]现行环境下手机实现网络媒体的流畅实时播放之简单演示(StreamingDemo)说明我的资源&#xff1a;http://www.cnblogs.com/Files/zhengyun_ustc/StreamingDemo-src-1.0.13.rar 这个…

[J2ME]增强型二级菜单(增加了三级菜单以及悬浮菜单)

[J2ME]增强型二级菜单演示(AdvdMenuBar)说明我的资源&#xff1a;http://www.cnblogs.com/Files/zhengyun_ustc/AdvdMenuBar-src-1.0.26.rar 这个1.0.26版本的j2me软件&#xff0c;能够在WTK2.3beta的模拟器上运行。本源代码改自SaltedFish的增强版本的AdvdMenuBar&#xff0c;…

[J2ME QA]Target port denied to untrusted applications问题回应

[When]开发J2ME程序的时候&#xff0c;用户可能在运行Socket程序连接远端Socket服务器时出现不受信任的错误&#xff0c;如下面的代码&#xff1a; SocketConnection sc (SocketConnection)Connector.open("socket://localhost:8080");报错为&#xff1a;Uncaught e…