Java 音频停止和播放按钮(Android)

Java 音频停止和播放按钮(Android),java,android,eclipse,button,media-player,Java,Android,Eclipse,Button,Media Player,我有这个问题,我想播放一些音频 我有两个按钮,“播放”和“停止” 问题是,在我按下停止按钮,然后按下播放按钮后,什么也没发生-“停止”按钮停止播放歌曲,但我希望“播放”按钮再次播放歌曲(从开始播放)。以下是我的代码: final MediaPlayer mp = MediaPlayer.create(this, R.raw.megadeth); 然后是两个公共单击: (为了玩…) 为了停止赛道 final Button button2 = (Button) findViewById(R

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

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

问题是,在我按下停止按钮,然后按下播放按钮后,什么也没发生-“停止”按钮停止播放歌曲,但我希望“播放”按钮再次播放歌曲(从开始播放)。以下是我的代码:

final MediaPlayer mp = MediaPlayer.create(this, R.raw.megadeth);
然后是两个公共单击:

(为了玩…)

为了停止赛道

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

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

        }
    });
有人能看出这个问题吗?如果是的话,你能修好它吗。。。(供建议)

非常感谢


James

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


请参阅(查看状态图)。

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

创建:

    public MediaPlayer mp=null;
开始:

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

        mp.stop();

还请注意,您不需要使用prepare,因为create方法已经调用prepare for you()。

Android文档中有一个bug,在第页中,据说您可以
停止()
一个“原始资源”mediaplayer,然后只需调用
重置()
prepare()即可重放它
再次调用
start()
之前。正如您所注意到的,这不起作用

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

我不知道一个干净的方法来解决这个问题。stealthcopter的方法非常有效,但对您的设计来说是一个难题,因为您需要每个start()调用的上下文:(并且需要销毁和创建一个复杂的对象,这对像游戏这样的实时应用程序是有代价的

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

stop()
prepare()
但是如果您现在调用start(),它将不会从一开始就重新启动。您可以调用
seekTo(0)
,但是声音将有一点来自上一播放位置的噪音


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

*播放按钮工作正常,-第一次使用*停止按钮工作正常,(在停止音频时)仍然存在再次启动音频的问题=/-播放按钮:(看我放了什么…“mp.prepare”,然后是一些if…“mp.start”,那么为什么它不起作用呢?@James Rattray:把
mp.reset()
改成
mp.prepare()
在您的按钮2代码中。重置需要重置数据源并再次调用prepare-这是为了从错误中恢复。所以根本没有mp.Reset?只需mp.stop然后mp.prepare()?-不…这不起作用=/Quick fix:mp.pause();然后…mp.Seekto(0);这是有效的,但我猜这是无效的?重置后MediaPlayer返回到“空闲”状态。我查看了您提供的页面,但没有看到它。您可以在状态图上查看此页面,并查看reset()的位置:)
stop()
prepare()