Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在其他活动中停止mediaPlayer?_Android_Media Player - Fatal编程技术网

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

Android 如何在其他活动中停止mediaPlayer?,android,media-player,Android,Media Player,嗨,你能帮我吗?我有两个活动,我想在另一个活动中停止media player,如何使用第一个活动中的按钮在第二个活动中停止media player, 我在第一个活动中的代码 public class homenor extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon

嗨,你能帮我吗?我有两个活动,我想在另一个活动中停止media player,如何使用第一个活动中的按钮在第二个活动中停止media player, 我在第一个活动中的代码

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:尝试在空对象引用上调用虚拟方法'void android.media.MediaPlayer.stop()

我怎样才能解决这个问题?谢谢

将您已经使用的媒体播放器公开,然后从第二个活动开始,按如下方式停止媒体播放器

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

我的建议是创建一个类,如MediaPlayerManager或。。。 在该类内创建MediaPlayer实例,并使用pause、play、stop等方法实现接口。。。
因此,当需要action MediaPlayer获取该类的实例并调用合适的方法时,请创建类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()

对不起,我不明白,你能说得更清楚一点吗?你的媒体播放器是公共的,其他班级可以访问。只要在你想停止媒体播放器的地方调用上面的代码就可以了。你的活动流程是什么?主页->主页->主页?或者homenor->home?homenor->home根据您的评论,home活动尚未创建,因此它会抛出空指针。如果它有效,则您可以将其标记为答案,因此它也将与upvote一样帮助其他人