如何使用MediaPlayer作为静态变量?

时间:2014-05-05 07:25:29

标签: android android-mediaplayer static-members

我真的需要将MediaPlayer用作静态变量,但每次我尝试为其编写代码时,都会遇到不同的错误。没有办法解决它,因为我必须使用5个不同的MediaPlayer特定实例,然后在与首次创建实例的不同活动中的每个实例上调用stop()方法。这是必要的,因为我需要5个不同的mp3文件,需要在不同的时间在不同的活动中使用,但是它们必须全部停在一个活动中(一次只能播放一个,但我想编写代码来覆盖停止所有5,效率高。)

我已将活动1中的MediaPlayer声明为全局静态变量:public static MediaPlayer MP_GODZILLA = new MediaPlayer();

然后在页面下方,我收到mp3文件并启动它:

public void onFinish() {
                mTextField.setText("ROAR!!");
                // call some media function when timer is done
                MP_GODZILLA.create(GodzillaThemedActivity.this, R.raw.godzilla_roar);
                MP_GODZILLA.start();

                // This disables the pause/play button when timer ends
                Button disablePausePlay = (Button)findViewById(R.id.btnPause);
                disablePausePlay.setEnabled(false);
            }

然后,在一个单独的活动中,我需要检查这个mp3是否正在播放,如果是,那么我必须停止它:

 btnStop = (Button)findViewById(R.id.btnStop);
        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Since this uses the static variable mpGodzilla, must call it from original activity
                if(GodzillaThemedActivity.MP_GODZILLA.isPlaying()){
                    GodzillaThemedActivity.MP_GODZILLA.stop();
                }
            }
        });

但是当我运行它时它没有播放任何声音,MP_GODZILLA.start();在某种程度上无效。相反,我得到了这个错误:

984-984/com.azurespot.disastertimer.app E/MediaPlayer﹕ start called in state 1
05-05 07:08:15.185      984-984/com.azurespot.disastertimer.app E/MediaPlayer﹕ error (-38, 0)
05-05 07:08:15.201      984-984/com.azurespot.disastertimer.app E/MediaPlayer﹕ Error (-38,0)

我做错了什么?感谢。

0 个答案:

没有答案