在android中停止几个媒体播放器

Posted

技术标签:

【中文标题】在android中停止几个媒体播放器【英文标题】:Stopping several Media Players in android 【发布时间】:2013-11-02 18:23:40 【问题描述】:

我在同一个活动中有多个 MediaPlayer。它是这样工作的:

MediaPlayer mpOne 开始播放,如果变量的值为“yes” MediaPlayer mptwo 开始播放,否则 mpThree 开始播放。 当音频结束时,启动另一个相同的进程 这是我的代码:

MediaPlayer mpOne,mpTwo,mpThree,mpFour,mpFive

...
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.morning);

        mpOne= MediaPlayer.create(this, R.raw.one);
        mphora.setLooping(false);
mpTwo= MediaPlayer.create(this, R.raw.two);
        mphora.setLooping(false);
mpThree= MediaPlayer.create(this, R.raw.three);
        mphora.setLooping(false);
mpFour= MediaPlayer.create(this, R.raw.four);
        mphora.setLooping(false);
mpFive= MediaPlayer.create(this, R.raw.five);
        mphora.setLooping(false);

    mpOne.start();
        mpOne.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
        
            @Override
            public void onCompletion(MediaPlayer mp) 
            
                if (variable.equals("yes")
                        mpTwo.start();
             else 
            mpThree.start();    
            
        );

        mpTwo.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
        
            @Override
            public void onCompletion(MediaPlayer mp) 
            
            mpFour.start();
        );

        mpThree.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
        
            @Override
            public void onCompletion(MediaPlayer mp) 
            
            mpFour.start();
        );

        mpFour.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
        
            @Override
            public void onCompletion(MediaPlayer mp) 
            
            // same proccess
        );


我的问题是当我想停止所有音频时。 目前我有一个按钮可以执行以下操作:

stop.setOnClickListener(new View.OnClickListener() 
                public void onClick(View view) 

.setOnClickListener(new View.OnClickListener() 
                public void onClick(View view) 

                    if(mpOne.isPlaying())mpOne.stop();mpOne.release();
                    else if(mpTwo.isPlaying())mpTwo.stop();mpTwo.release();
                    else if(mpThree.isPlaying())mpThree.stop();mpThree.release();
                    else if(mpFour.isPlaying())mpFour.stop();mpFour.release();
                    else if(mpFive.isPlaying())mpFive.stop();mpFive.release();
                
                
        );

问题是有时它可以工作,有时音频仍在播放。

我已经搜索并发现了类似的问题,但没有解决方案

谁能告诉我停止所有播放的安全方法?

非常感谢您。

问候

【问题讨论】:

【参考方案1】:

您只能执行一个 MediaPlayer 实例并在 onCompletion 设置不同的音频源

【讨论】:

但是要启动一个新的音频源,必须启动一个新的 MediaPlayer,不是吗?我想我不明白你的回答。请问你有例子吗?谢谢 @MiguelC Paolino 是正确的。每次你想播放一个新的声音(我假设它是声音)时,你应该在同一个MediaPlayer 上通过reset()setDataSource(...)prepare()start() 序列。或者最多,在两个之间交替。如果声音很短,您可能也应该查看SoundPool。它可能更适合您的情况。

以上是关于在android中停止几个媒体播放器的主要内容,如果未能解决你的问题,请参考以下文章

Android媒体播放器没有完全寻求进展

应用程序关闭后,用于媒体控件的 Android 广播接收器停止工作

在 cordova/phonegap Android 应用程序上关闭屏幕后媒体停止播放

到达时间后停止播放器

如何获取媒体播放器持续时间并停止 Chronometer?

按下后退按钮时停止媒体播放器MP3