我如何在其他活动中停止mediaPlayer?

时间:2019-06-30 13:33:50

标签: android media-player

嘿,你能帮我吗?,我有2个活动,我想在另一个活动中停止mediaPlayer,如何在第一个活动中使用按钮停止第二个活动中的媒体播放器, 我在第一次活动中的代码

public class homenor extends AppCompatActivity {

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

    Button btmateri = (Button) findViewById(R.id.btmateri);


    btmateri.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(homenor.this, home.class);
            home.mediaPlayer.stop();
            home.mediaPlayer2.stop();
            startActivity(intent);
        }
    });

}

以及第二次练习中的此代码

public class home extends AppCompatActivity {


int [] sound, soalkuis;
int soundke = 0;
int getNosoal = 0;
public static MediaPlayer mediaPlayer, mediaPlayer2;


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

    sound = new int[] {R.raw.definisiprisma1, R.raw.definisiprisma2, R.raw.definisiprisma3,R.raw.jaringprisma1,R.raw.luasprisma1, R.raw.luasprisma2
            ,R.raw.luasprisma3,R.raw.luasprisma4,R.raw.luasprisma5,R.raw.luasprisma6,R.raw.contohluasprisma1,R.raw.penyelesaianluasprisma1,R.raw.contohluasprisma2
            ,R.raw.penyelesaianluasprisma2,R.raw.contohluasprisma3, R.raw.penyelesaianluasprisma3, R.raw.volumeprisma1, R.raw.contohvolume1
            , R.raw.penyelesaianvolumeprisma1, R.raw.contohvolume2, R.raw.penyelesaianvolumeprisma2, R.raw.contohvolume3, R.raw.penyelesaianvolumeprisma3
            , R.raw.rangkumanprisma1, R.raw.rangkumanprisma2};

    soalkuis = new int[] {R.raw.soalprisma1, R.raw.soalprisma2, R.raw.soalprisma3, R.raw.soalprisma4, R.raw.soalprisma5, R.raw.soalprisma6
            , R.raw.soalprisma7, R.raw.soalprisma8, R.raw.soalprisma9, R.raw.soalprisma10};

    mediaPlayer = new MediaPlayer();
    mediaPlayer2 = new MediaPlayer();
    mediaPlayer = MediaPlayer.create(home.this, sound[soundke]);
    mediaPlayer2 = MediaPlayer.create(home.this, soalkuis[getNosoal]);
    mediaPlayer2.setLooping(false);
    mediaPlayer.setLooping(false);
    mediaPlayer.start();

当我尝试这样做时,出现了这样的错误java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.stop()' on a null object reference 我该如何解决?谢谢

3 个答案:

答案 0 :(得分:0)

将您已经在使用的媒体播放器设为公开,然后从第二个活动中像这样停止媒体播放器

   try {
        mp.reset();
        mp.prepareAsync();
        mp.stop();
        mp.release();
        mp = null;
    } catch (Exception e) {
        e.printStackTrace();
    }

答案 1 :(得分:0)

我的建议是创建一个类似MediaPlayerManager的类或... 在此类内部创建MediaPlayer实例,并使用您的方法(如暂停,播放,停止,...)实现您的接口 因此,当需要操作MediaPlayer时,请获取此类的实例并调用适当的方法

答案 2 :(得分:0)

创建类MyMediaPlayer,

public class MyMediaPlayer {

private static MyMediaPlayer Instance;
MediaPlayer mediaPlayer;

static MyMediaPlayer getMediaPlayerInstance() {
    if (Instance == null) {
        return Instance = new MyMediaPlayer();
    }
    return Instance;
}

public void playAudioFile(Context context, int sampleAudio) {
    mediaPlayer = MediaPlayer.create(context, sampleAudio);
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });

}

public void stopAudioFile() {
    if (mediaPlayer != null) {
        mediaPlayer.stop();
    }
}}

现在,调用此方法播放音频

MyMediaPlayer.getMediaPlayerInstance().playAudioFile(this, R.raw.sampleaudio)

要停止音频,请调用此方法

MyMediaPlayer.getMediaPlayerInstance().stopAudioFile()