Как я могу остановить MediaPlayer в другой деятельности? - PullRequest
0 голосов
/ 30 июня 2019

Привет, вы можете мне помочь? У меня есть 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 голосов
/ 30 июня 2019

Я предлагаю создать класс, такой как MediaPlayerManager или ... создать экземпляр MediaPlayer внутри этого класса и реализовать свой интерфейс с помощью вашего метода, такого как pause, play, stop, ... поэтому, когда необходимо действие, MediaPlayer получает экземпляр этого класса ивызовите подходящий метод

0 голосов
/ 03 июля 2019

создать класс 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()
0 голосов
/ 30 июня 2019

Возьмите медиаплеер как общедоступный, которым вы уже пользуетесь, затем со второго занятия остановите медиаплеер, как это

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