首页 文章

在背景上的Android媒体播放器不会停止播放同时打开其他活动

提问于
浏览
1

我的应用程序在我的主要活动中有3个选项(按钮),以及在启动应用程序时播放歌曲的媒体播放器 . 当应用程序启动时,媒体播放器正确启动,但如果我在音频仍在播放时按下按钮开始新活动,则应用程序会崩溃(不幸的是app已经停止) . 如果我在消息中按“确定”,则会打开新活动并停止播放媒体播放器 .

我的目标是开始新活动并停止媒体播放器(歌曲) .

任何人都可以帮我解决这些问题 .

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:尝试在空对象引用E / AndroidRuntime(27610)上调用虚方法'void android.media.MediaPlayer.stop()':at android .app.ActivityThread.performPauseActivity(ActivityThread.java:3260)E / AndroidRuntime(27610):在android.app.ActivityThread.performPauseActivity(ActivityThread.java:3219)E / AndroidRuntime(27610):at 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 / And roidRuntime(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:尝试在空对象引用E / AndroidRuntime(27610)上调用虚方法'void android.media.MediaPlayer.stop()':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.Acti vityThread.performPauseActivity(ActivityThread.java:3246)E / AndroidRuntime(27610):... 11更多

2 回答

  • 1

    你的错误非常清楚 . 您在 onPause() 方法的 120 行获得 NullPointerException . 's because you haven' t创建了 player 对象,并尝试调用其中一个方法 .

    您已将其声明为全局变量,但尚未创建它 . 您在 onCreate() 方法中创建了一个不同的 player 对象,但这只是一个局部变量 .

  • 0
    • 首先排队

    final MediaPlayer player = MediaPlayer.create(MainActivity.this, R.raw.welcome);

    不要将 MediaPlayer 播放器声明为本地播放器,它应该是全局播放器 .

    • onPause() 中使用此项

    if(player!= null){player.stop(); }

    • in onResume()

    if(player!= null){player.start(); }

    通过上面的代码播放器将在前景中的应用程序播放音乐,当后台播放器中的应用程序停止播放音乐时,当应用程序再次进入前景状态播放器将播放音乐

相关问题