Java 打开其他活动时,后台android media player不会停止播放
我的应用程序在我的主要活动中有3个选项(按钮)和一个媒体播放器,在应用程序启动时播放歌曲。启动应用程序时,媒体播放器会正确启动,但如果在音频仍在播放时按下按钮启动新活动,则应用程序会崩溃(不幸的是,应用程序已停止)。 如果我在信息中按“确定”,则会打开新活动,媒体播放器将停止 我的目标是启动新活动并停止媒体播放器(歌曲) 有人能帮我解决这些问题吗Java 打开其他活动时,后台android media player不会停止播放,java,android,android-mediaplayer,playback,Java,Android,Android Mediaplayer,Playback,我的应用程序在我的主要活动中有3个选项(按钮)和一个媒体播放器,在应用程序启动时播放歌曲。启动应用程序时,媒体播放器会正确启动,但如果在音频仍在播放时按下按钮启动新活动,则应用程序会崩溃(不幸的是,应用程序已停止)。 如果我在信息中按“确定”,则会打开新活动,媒体播放器将停止 我的目标是启动新活动并停止媒体播放器(歌曲) 有人能帮我解决这些问题吗 TextView logoname; Button autismlogo,visionlogo,hearinglogo; private Senso
TextView logoname;
Button autismlogo,visionlogo,hearinglogo;
private SensorManager mSensorManager;
private ShakeEventListener mSensorListener;
MediaPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
logoname = (TextView)findViewById(R.id.logotext);
autismlogo = (Button)findViewById(R.id.autismbutton);
visionlogo = (Button)findViewById(R.id.visionbutton);
hearinglogo = (Button)findViewById(R.id.hearingbutton);
final MediaPlayer player = MediaPlayer.create(MainActivity.this, R.raw.welcome);
player.start();
// ---SENSORS--------
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorListener = new ShakeEventListener();
mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {
public void onShake() {
Intent vision = new Intent(getApplicationContext(),Vision_main.class);
startActivity(vision);
}
});
// ----ON CLICK EVENTS -----------
autismlogo.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent autism = new Intent(getApplicationContext(),Autism_main.class);
startActivity(autism);
}
});
visionlogo.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent vision = new Intent(getApplicationContext(),Vision_main.class);
startActivity(vision);
}
});
hearinglogo.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent hearing = new Intent(getApplicationContext(),Hearing_main.class);
startActivity(hearing);
}
});
}
public void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
}
public void onPause() {
super.onPause();
player.stop();
mSensorManager.unregisterListener(mSensorListener);
}
日志Cat错误
E/AndroidRuntime(27610):致命异常:主
E/AndroidRuntime(27610):进程:com.giorgospapadopoulos.move4all,PID:27610
E/AndroidRuntime(27610):java.lang.RuntimeException:无法暂停活动{com.giorgospapadopoulos.move4all/com.giorgospapadopoulos.move4all.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.media.MediaPlayer.stop()”
E/AndroidRuntime(27610):位于android.app.ActivityThread.performPauseActivity(ActivityThread.java:3260)
E/AndroidRuntime(27610):位于android.app.ActivityThread.performPauseActivity(ActivityThread.java:3219)
E/AndroidRuntime(27610):位于android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3194)
E/AndroidRuntime(27610):位于android.app.ActivityThread.access$1000(ActivityThread.java:151)
E/AndroidRuntime(27610):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1314)
E/AndroidRuntime(27610):位于android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(27610):位于android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime(27610):位于android.app.ActivityThread.main(ActivityThread.java:5254)
E/AndroidRuntime(27610):位于java.lang.reflect.Method.invoke(本机方法)
E/AndroidRuntime(27610):位于java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(27610):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
E/AndroidRuntime(27610):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
E/AndroidRuntime(27610):由以下原因引起:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“void android.media.MediaPlayer.stop()”
E/AndroidRuntime(27610):位于com.giorgospapadopoulos.move4all.MainActivity.onPause(MainActivity.java:220)
E/AndroidRuntime(27610):位于android.app.Activity.performPause(Activity.java:6101)
E/AndroidRuntime(27610):位于android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1310)
E/AndroidRuntime(27610):位于android.app.ActivityThread.performPauseActivity(ActivityThread.java:3246)
E/AndroidRuntime(27610):。。。还有11个
你的错误很明显。在
onPause()
方法的120行中,您会得到一个NullPointerException
。这是因为您尚未创建player
对象,并且尝试调用其中一个方法
您已将其声明为全局变量,但尚未创建它。在onCreate()
方法中创建不同的player
对象,但这只是一个局部变量
首当其冲
final MediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.welcome)代码>
不要将MediaPlayer播放器声明为本地播放器,它应该是全局播放器
在onPause()中使用此选项
如果(玩家!=null){
player.stop();
}
在onResume()中
如果(
玩家!=空){
player.start();
}
根据上述代码,当应用程序位于前台时,播放器将播放音乐;当应用程序位于后台时,播放器将停止播放音乐;当应用程序再次进入前台状态时,播放器将播放音乐。感谢您的回复George D。如果创建这样的播放器对象