媒体播放器停止播放几次之后打 [英] Mediaplayer stops playing after playing a few times

查看:122
本文介绍了媒体播放器停止播放几次之后打的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经得到了关于preSS它播放随机声音剪辑后跟另一个,然后又通过后然而$ P $之一的MediaPlayer pssing按钮无数次(15-20次)的按钮,所有的音频刚刚停止。我放开了最后的音频剪辑后,媒体播放器播放,所以我不认为这是原因。任何指针?

 公共类主要活动扩展{
MediaPlayer的熔点;
按钮生成;@覆盖
保护无效的onCreate(捆绑savedInstanceState){    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);    产生=(按钮)findViewById(R.id.sound);}公共无效youSir(查看视图)
{
    generate.setVisibility(View.INVISIBLE);
    随机randomGenerator =新的随机();
    INT randomInt = randomGenerator.nextInt(3)+ 1;
    开关(randomInt){
    案例1:MP = MediaPlayer.create(这一点,R.raw.beg); mp.start();
    打破;
    案例2:MP = MediaPlayer.create(这一点,R.raw.begone); mp.start();
    打破;
    案例3:MP = MediaPlayer.create(这一点,R.raw.begtwo); mp.start();
    打破;
    }
    mp.setOnCompletionListener(新OnCompletionListener(){
        // @覆盖
        公共无效onCompletion(MediaPlayer的为arg0){            audioTwo();
         }
    });}
保护无效audioTwo(){
    // TODO自动生成方法存根
    随机randomGenerator =新的随机();
    INT randomInt = randomGenerator.nextInt(3)+ 1;
    开关(randomInt){
    案例1:MP = MediaPlayer.create(这一点,R.raw.start); mp.start();
    打破;
    案例2:MP = MediaPlayer.create(这一点,R.raw.end); mp.start();
    打破;
    案例3:MP = MediaPlayer.create(这一点,R.raw.mid); mp.start();
    打破;
    }
    mp.setOnCompletionListener(新OnCompletionListener(){
        // @覆盖
        公共无效onCompletion(MediaPlayer的为arg0){
            audioThree();
         }
    });
}保护无效audioThree(){
    // TODO自动生成方法存根
    随机randomGenerator =新的随机();
    INT randomInt = randomGenerator.nextInt(3)+ 1;
    开关(randomInt){
    案例1:MP = MediaPlayer.create(这一点,R.raw.three); mp.start();
    打破;
    案例2:MP = MediaPlayer.create(这一点,R.raw.two); mp.start();
    打破;
    案例3:MP = MediaPlayer.create(这一点,R.raw.one); mp.start();
    打破;
    mp.setOnCompletionListener(新OnCompletionListener(){
        // @覆盖
        公共无效onCompletion(MediaPlayer的为arg0){
            mp.stop();
            mp.release();
            generate.setVisibility(View.VISIBLE);
         }
    });
}


解决方案

这是一个有点老问题,但我尽量回答的情况下,别人也有类似的问题。

您用完了音频资源。在code居然不释放所有的MediaPlayer 实例。它释放只有三分之一的每次运行。 audioTwo() audioThree 指派新的的MediaPlayer 实例的 MP 变量,但他们不会释放已经存储在那里的​​实例。做这样的事情:

 保护无效audioTwo(){
    // RELEASING preVIOUS MEDIAPLAYER
    mp.release();    随机randomGenerator =新的随机();
    INT randomInt = randomGenerator.nextInt(3)+ 1;
    开关(randomInt){
    案例1:MP = MediaPlayer.create(这一点,R.raw.start); mp.start();
    打破;
    ...

这同样适用于 audioThree()

I've got a button that on press it plays a random sound clip followed by another and then another via one mediaplayer however after pressing the button numerous times (15-20 times) all audio just stops. I'm releasing the mediaplayer after the last audio clip is played so I don't see that being the reason. Any pointers?

public class Main extends Activity {


MediaPlayer mp;
Button generate;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    generate = (Button) findViewById(R.id.sound);

}

public void youSir (View view)
{
    generate.setVisibility(View.INVISIBLE);
    Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(3) + 1;
    switch (randomInt){
    case 1: mp = MediaPlayer.create(this, R.raw.beg); mp.start();
    break;
    case 2: mp = MediaPlayer.create(this, R.raw.begone); mp.start();
    break;
    case 3: mp = MediaPlayer.create(this, R.raw.begtwo); mp.start();
    break;
    }
    mp.setOnCompletionListener(new OnCompletionListener(){
        // @Override
        public void onCompletion(MediaPlayer arg0) {

            audioTwo();
         }
    });

}


protected void audioTwo() {
    // TODO Auto-generated method stub
    Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(3) + 1;
    switch (randomInt){
    case 1: mp = MediaPlayer.create(this, R.raw.start); mp.start();
    break;
    case 2: mp = MediaPlayer.create(this, R.raw.end); mp.start();
    break;
    case 3: mp = MediaPlayer.create(this, R.raw.mid); mp.start();
    break;
    }
    mp.setOnCompletionListener(new OnCompletionListener(){
        // @Override
        public void onCompletion(MediaPlayer arg0) {
            audioThree();
         }
    });
}

protected void audioThree() {
    // TODO Auto-generated method stub
    Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(3) + 1;
    switch (randomInt){
    case 1: mp = MediaPlayer.create(this, R.raw.three); mp.start();
    break;
    case 2: mp = MediaPlayer.create(this, R.raw.two); mp.start();
    break;
    case 3: mp = MediaPlayer.create(this, R.raw.one); mp.start();
    break;
    mp.setOnCompletionListener(new OnCompletionListener(){
        // @Override
        public void onCompletion(MediaPlayer arg0) {
            mp.stop();
            mp.release();
            generate.setVisibility(View.VISIBLE);
         }
    });
}

解决方案

This is a bit old question but I try to answer it in case someone else has a similar problem.

You are running out of audio resources. The code actually does not release all MediaPlayer instances. It releases only one out of three each run. audioTwo() and audioThree assign new MediaPlayer instance to the mp variable but they don't release the instance which is already stored in there. Do something like:

protected void audioTwo() {
    // RELEASING PREVIOUS MEDIAPLAYER
    mp.release();

    Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(3) + 1;
    switch (randomInt){
    case 1: mp = MediaPlayer.create(this, R.raw.start); mp.start();
    break;
    ...

The same goes for audioThree().

这篇关于媒体播放器停止播放几次之后打的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆