我的应用程序在我的主要活动中有3个选项(按钮),以及在启动应用程序时播放歌曲的媒体播放器。当应用程序启动时,媒体播放器正确启动,但如果我在音频仍在播放时按下按钮开始新活动,则应用程序会崩溃(不幸的是app已经停止)。 如果我按" OK"在消息中,它打开新活动,媒体播放器停止。
我的目标是开始新活动并停止媒体播放器(歌曲)。
有人可以帮我解决这些问题吗?
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);
}
Log 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()'在null对象引用上 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):at java.lang.reflect.Method.invoke(Native Method) E / AndroidRuntime(27610):at java.lang.reflect.Method.invoke(Method.java:372) E / AndroidRuntime(27610):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) E / AndroidRuntime(27610):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) E / AndroidRuntime(27610):引起:java.lang.NullPointerException:尝试调用虚方法' void android.media.MediaPlayer.stop()'在null对象引用上 E / AndroidRuntime(27610):at 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更多
答案 0 :(得分:1)
你的错误很清楚。您在NullPointerException
方法的第120
行获得了onPause()
。这是因为您还没有创建player
对象,并且您尝试调用其中一种方法。
您已将其声明为全局变量但尚未创建它。您在player
方法中创建了一个不同的onCreate()
对象,但这只是一个局部变量。
答案 1 :(得分:0)
final MediaPlayer player = MediaPlayer.create(MainActivity.this, R.raw.welcome);
不将 MediaPlayer 播放器声明为本地播放器,它应该是全局播放器。
在onPause()
if(player!= null){ player.stop(); }
在onResume()
如果( 玩家!= null){ player.start(); }
通过上述代码播放器将在前景中的应用程序播放音乐,当后台播放器中的应用程序停止播放音乐,并且当应用程序再次进入前景状态时,播放器将播放音乐。