gpt4 book ai didi

android - 有没有办法停止所有 MediaPlayer?

转载 作者:太空狗 更新时间:2023-10-29 14:34:47 28 4
gpt4 key购买 nike

我目前正在通过阅读 Android 官方网站上的开发文档来开发我的第一个 Android 应用程序。我想要完成的是播放一些铃声。我的代码的一部分是:

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;

public class PlayRingSounds extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

public void PlayRingFile(View view) {
switch (view.getId()) {
case R.id.Button01:
MediaPlayer mp1 = MediaPlayer.create(this.getApplicationContext(), R.raw.aaa);
mp1.start();
break;
case R.id.Button02:
MediaPlayer mp2 = MediaPlayer.create(this.getApplicationContext(), R.raw.bbb);
mp2.start();
break;
}
}
}

问题是当我在播放“aaa”(来自第一个按钮的声音文件)时单击第二个按钮时,“bbb”也同时开始播放。有没有办法在“bbb”播放之前停止“aaa”,或者有没有办法停止所有媒体播放器?

更新 12/30/2009 - 新代码是:

   case R.id.Button01:
if (mp2.isPlaying())
{
mp2.stop();
mp2.release();
}
mp1.reset();
mp1.prepare();
mp1.start();
break;
case R.id.Button02:
if (mp1.isPlaying())
{
mp1.stop();
mp1.release();
}
mp2.reset();
mp2.prepare();
mp2.start();
break;

mp1.prepare() 和 mp2.prepare() 给出 IOException 错误。

最佳答案

请注意:这不是最好的方法,这很草率,这只是一个想法

public void PlayRingFile(View view) {       
switch (view.getId()) {
case R.id.Button01:
if (mp2.isPlaying()) {
mp2.stop(); // stops the object from playing
mp2.release(); // always a good practice to release the resource when done
}
MediaPlayer mp1 = MediaPlayer.create(this.getApplicationContext(), R.raw.aaa);
mp1.start();
break;
case R.id.Button02:
if (mp1.isPlaying()) {
mp1.stop(); // stops the object from playing
mp1.release(); // always a good practice to release the resource
}
MediaPlayer mp2 = MediaPlayer.create(this.getApplicationContext(), R.raw.bbb);
mp2.start();
break;
}
}

正如我所说,这不是最好的解决方案,特别是如果您添加更多按钮,那么您将不得不检查 MediaPlayer 的每个实例,并且必须有更好的方法来执行此操作。

我的建议是尝试找到一种循环遍历所有 MediaPlayer 的方法,看看它们是否打开,如果打开,释放资源并停止播放,或者可能停止所有 code>MediaPlayer 播放一般?

在此期间,我将继续寻找其他方法,希望这能为您指明正确的方向。

编辑(12/30/09):

case R.id.Button01:
if (mp2.isPlaying()) {
mp2.stop();
mp2.release();
}
mp1.reset();
createMPlayer1(); // used to re-initialze the mediaplayer for reuse since resources were released.
mp1.prepare();
mp1.start();
break;
case R.id.Button02:
if (mp1.isPlaying()) {
mp1.stop();
mp1.release();
}
mp2.reset();
createMPlayer2();
mp2.prepare();
mp2.start();
break;

public void createMPlayer1() {
MediaPlayer mp1 = MediaPlayer.create(this.getApplicationContext(), R.raw.aaa);
}

public void createMPlayer2() {
MediaPlayer mp2 = MediaPlayer.create(this.getApplicationContext(), R.raw.bbb);
}

我认为在更新资源后再次尝试访问文件时可能会调用 IOException。我添加了两种方法来创建单独的原始文件,因为我相信释放资源时会发生异常。您可以重新初始化 MediaPlayer 或尝试放弃释放资源。

关于android - 有没有办法停止所有 MediaPlayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969975/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com