【问题标题】:Android - Looping Activity to Repeat MediaPlayerAndroid - 循环活动以重复 MediaPlayer
【发布时间】:2012-04-07 03:38:07
【问题描述】:

我正在尝试为更长的音频文件创建音板,但不知道如何在不关闭活动的情况下停止音频文件并重新启动它。假设每个音频文件长一分钟。如果我播放第一个音频文件 20 秒并开始下一个音频文件,第一个停止播放,第二个开始播放。但是,如果我再次单击第一个音频文件,第二个会停止播放,而第一个不会。我需要帮助。这让我发疯了。

    bAudio1 = (ImageButton) findViewById(R.id.bAudio1);
    bAudio2 = (ImageButton) findViewById(R.id.bAudio2);

    mpAudio1 = MediaPlayer.create(this, R.raw.audio1);
    mpAudio2 = MediaPlayer.create(this, R.raw.audio2);

    bAudio1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                    if(mpAudio1.isPlaying()) {
                            mpAudio1.stop();
                    } else {
                            if(mpAudio2.isPlaying()) { mpAudio2.stop(); }
                            mpAudio1.start();
                    }
            }
    });

    bAudio2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                    if(mpAudio2.isPlaying()) {
                            mpAudio2.stop();
                    } else {
                            if(mpAudio1.isPlaying()) { mpAudio1.stop(); }
                            mpAudio2.start();
                    }
            }
    });

【问题讨论】:

    标签: android loops android-activity media-player imagebutton


    【解决方案1】:

    这对我有用:

    public class ExampleActivity extends Activity implements OnClickListener {
    
    private Button button1;
    private Button button2;
    private MediaPlayer mediaPlayer1;
    private MediaPlayer mediaPlayer2;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);
    
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(this);
        button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button1:
            // play first audio clip and stop the second if playing
            if (mediaPlayer2 != null && mediaPlayer2.isPlaying()) {
                mediaPlayer2.stop();
                mediaPlayer2.release();
                mediaPlayer2 = null;
            }
            mediaPlayer1 = MediaPlayer.create(this, R.raw.song1);
            mediaPlayer1.start();
            break;
        case R.id.button2:
            // play second audio clip and stop the first if playing
            if (mediaPlayer1 != null && mediaPlayer1.isPlaying()) {
                mediaPlayer1.stop();
                mediaPlayer1.release();
                mediaPlayer1 = null;
            }
            mediaPlayer2 = MediaPlayer.create(this, R.raw.song2);
            mediaPlayer2.start();
            break;
        }
    }
    
    @Override
    protected void onPause() {
        super.onPause();
    
        // stop the second if playing
        if (mediaPlayer2 != null && mediaPlayer2.isPlaying()) {
            mediaPlayer2.stop();
            mediaPlayer2.release();
            mediaPlayer2 = null;
        }
    
        // stop the first if playing
        if (mediaPlayer1 != null && mediaPlayer1.isPlaying()) {
            mediaPlayer1.stop();
            mediaPlayer1.release();
            mediaPlayer1 = null;
        }
    }
    

    【讨论】:

    • 我取出 .prepare() 因为我没有设置数据源,但如果您决定从文件中读取歌曲,则需要包含它。 developer.android.com/reference/android/media/… 另外,我省略了从启动按钮停止歌曲的逻辑。恕我直言,这可能应该抽象为另一个按钮。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多