【问题标题】:android media player on background not stop playing while open other activity后台的android媒体播放器在打开其他活动时不会停止播放
【发布时间】:2019-01-21 15:55:37
【问题描述】:

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

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

谁能帮我解决这些问题。

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);
}

记录猫错误

E/AndroidRuntime(27610): 致命异常: main 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(Native Method) 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 更多

【问题讨论】:

    标签: java android android-mediaplayer playback


    【解决方案1】:

    你的错误很明显。您在 onPause() 方法中的 120 行得到一个 NullPointerException。那是因为您还没有创建 player 对象并且您尝试调用它的方法之一。

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

    【讨论】:

    • 感谢您的回复 George D. if create a player object like that
    【解决方案2】:
    1. 排第一

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

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

    1. onPause()中使用它

      如果(玩家!=空){ 播放器.stop(); }

    2. onResume()

      如果( 玩家!=空){ 播放器.start(); }

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      相关资源
      最近更新 更多