Android 如何在其他活动中停止mediaPlayer?
嗨,你能帮我吗?我有两个活动,我想在另一个活动中停止media player,如何使用第一个活动中的按钮在第二个活动中停止media player, 我在第一个活动中的代码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
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一样帮助其他人