【问题标题】:Stopping and Play button for Audio (Android)音频的停止和播放按钮 (Android)
【发布时间】:2010-04-22 17:39:52
【问题描述】:

我有这个问题,我想播放一些音频...

我有两个按钮,“播放”和“停止”...

问题是,在我按下停止按钮,然后按下播放按钮后,没有任何反应。 - 停止按钮停止歌曲,但我希望播放按钮再次播放歌曲(从头开始)这是我的代码:

final MediaPlayer mp = MediaPlayer.create(this, R.raw.megadeth);

然后是两个公共的点击:

(为了玩……)

 button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
             button.setText("Playing!");
             try {
     mp.prepare();
    } catch (IllegalStateException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
             mp.start();
             //
            }
        });

为了停止轨道......

    final Button button2 = (Button) findViewById(R.id.cancel);
    button2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

         mp.stop();
         mp.reset();

        }
    });

谁能看出这个问题?如果可以,请您修复它...(供建议)

非常感谢...

詹姆斯

【问题讨论】:

  • *播放按钮工作正常,-第一次 *停止按钮工作正常,(在停止音频时)仍然是再次启动音频的问题 =/ -播放按钮 :(

标签: java android eclipse button media-player


【解决方案1】:

您需要在start() 之前致电prepare()preparAsync()

查看API for details(查看状态图)。

【讨论】:

  • 看看我放了什么... 'mp.prepare' 然后是一些 ifs... 然后是 'mp.start' 那么为什么它不起作用?
  • @James Rattray:将 button2 代码中的 mp.reset() 更改为 mp.prepare()。重置需要重置数据源并再次调用准备 - 这是为了从错误中恢复。
  • 所以根本没有mp.reset?只是 mp.stop 然后 mp.prepare()? - 不……那行不通=/
  • 快速修复:mp.pause();然后... mp.Seekto(0);这行得通,但我猜这效率低下?
【解决方案2】:

Android 文档中有一个错误,在this 页面中说你可以stop() 一个“原始资源”媒体播放器,然后在调用@ 之前调用reset()prepare() 来重播它987654326@ 再次。正如您所注意到的,这不起作用。

问题是reset()清空了音源,回到了初始状态,所以必须重新设置数据源。不幸的是,您无法设置“原始资源”数据源,因为除了 create() 之外没有任何 API。

我不知道解决此问题的干净方法。隐形直升机的方式效果很好,但对您的设计来说很痛苦,因为您需要每个 start() 调用的上下文:(并且涉及破坏和创建一个复杂的对象,这对于游戏等实时应用程序来说是有代价的......

另一种确保只有 create() 调用才需要上下文的方法是以这种方式停止媒体播放器:

stop()
prepare()

但是如果你现在调用 start(),它不会从头开始重新启动。你可以打电话给seekTo(0),但是声音会比之前的播放位置有点杂音。

我一直对此进行调查。在原始资源上创建媒体播放器时,必须有一种干净有效的方法来停止和重新启动...

【讨论】:

【解决方案3】:

这就是我在我的程序中所做的工作。它每次都会释放媒体播放器,因为我每次调用它时都会使用不同的声音,但是它应该可以作为您使用的解决方法。

创作:

    public MediaPlayer mp=null;

开始:

    if (mp!=null){ 
            mp.reset();
            mp.release();
    }
            mp = MediaPlayer.create(test.this, soundResource);
            mp.start();

停止:

        mp.stop();

另外请注意,您不需要使用 prepare,因为 create 方法已经为您调用了 prepare (API REF)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多