2010-04-22 218 views
1

我有这个问题,我有一些音频我想播放...音频停止播放按钮(Android)

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

问题是,按下停止按钮后,然后按下播放按钮,什么也没有发生。 -The停止按钮停止歌曲,但我想要的播放按钮再次播放歌曲(从一开始)这里是我的代码:

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

,然后将两个公共onclicks:

(用于播放...)

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(); 

     } 
    }); 

任何人都可以看到的问题机智这个?如果是的话请您修复它......(对于建议)

非常感谢......

詹姆斯

+0

*播放按钮做工精细,负一时间各地 *停止按钮做工精细,(在停止音频) 仍再次启动音频的问题=/- 播放按钮:( – 2010-04-22 17:40:44

回答

1

您需要start()之前调用prepare()preparAsync()

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

+0

看看我把... 'mp.prepare'然后一些ifs ...然后'mp.start'那么为什么它不工作? – 2010-04-22 18:17:41

+0

@ James Rattray:将读取'mp.reset()'的行更改为您的button2代码中的'mp.​​prepare()'。Reset需要重新设置数据源并再次调用prepare - 这是从错误中恢复的结果 – JRL 2010-04-22 18:34:41

+0

So no mp。重置所有?只是mp.stop然后mp.prepare()? - 无效...这不起作用=/ – 2010-04-22 21:13:14

0

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

创作:

public MediaPlayer mp=null; 

开始:

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

停止:

 mp.stop(); 

另外请注意,您不需要使用做准备,因为创建方法已要求您准备(API REF)。

1

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

问题是reset()会清除音频源并返回到初始状态,因此您必须重新设置数据源。不幸的是,您不能设置“原始资源”数据源,因为除了create()之外,没有此API。

我不知道解决这个问题的干净方式。 stealthcopter的工作方式很好,但是对于你的设计来说很痛苦,因为你需要为每个start()调用(需要上下文):(并且涉及销毁和创建一个复杂的对象,这对于游戏等实时应用程序是一个价格...

,以确保这方面将只需要为创建()调用,就是这种方式阻止媒体播放器的另一种方式:

stop() 
prepare() 

但如果你现在叫start()方法,它不会重新开始。您可以拨打seekTo(0),但声音会有一点来自以前的播放位置的噪音。

我一直在调查。必须有停止,并在原始资源创建时重新启动媒体播放器的清洁和高效的方式...

+0

重置后MediaPlayer返回到“空闲”状态。 我查看了你给出的页面,但没有看到它。 你可以看看状态图上的这个页面,并看到reset()得到你的位置:) http://developer.android.com/reference/android/media/MediaPlayer.html#State%20Diagram – talel 2013-04-19 15:17:29