【问题标题】:Stop audio playing on backpress停止在 backpress 上播放音频
【发布时间】:2018-07-02 20:56:35
【问题描述】:

当我点击播放按钮并播放 mp3 声音时,我有一个活动。当我单击返回时,音频仍然在后台播放,并且还可以与其他令人讨厌的音频一起运行。我已经尝试实现这里使用的其他方法,但无济于事。

代码:

public class InstructionsManualActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_instructions_manual);
    Button one = (Button) this.findViewById(R.id.instructionsManual_but);
    final MediaPlayer mp = MediaPlayer.create(this, R.raw.instructions_manual);
    one.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            mp.start();
        }
    });
}

}

我已尝试过此代码,但应用程序在按下后崩溃

@Override
public void onBackPressed() {
    super.onBackPressed();
    if (mp.isPlaying()) {
        mp.stop(); // or mp.pause();
        mp.release();

【问题讨论】:

  • 您需要检查 mediaplayer 实例是否不为空,然后执行您的代码,检查下面我的答案,如果您仍然遇到错误,请告诉我。
  • 您在本地的 onCreate() 中声明 MediaPlayer,可能是您尝试暂停或释放您尚未创建的 MediaPlayer。只需全局声明您的 MediaPlayer 并在 onCreate() 中创建它
  • 说得好@GhulamMoinulQuadir,我添加了一个带有附加条件的答案来为他处理所有这些错误情况
  • 我已经意识到,但无法通过将其移出 onCreate() 来使其工作。你能帮我做这件事吗?
  • 从下面的答案中获取代码,我已经添加了代码,如果有的话,请告诉我您遇到的错误

标签: java android


【解决方案1】:

首先全局声明MediaPlayer对象

  MediaPlayer mp = null;  //Declaring globally so can access anywhere in activity.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_instructions_manual);
        Button one = (Button) this.findViewById(R.id.instructionsManual_but);
        mp = MediaPlayer.create(this, R.raw.instructions_manual);
        one.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                mp.start();
            }
        });
    }

当您在任何活动中按下返回按钮时onBackPressed() 将被调用,如果正在播放,您可以在此处停止媒体播放器。

 @Override
    public void onBackPressed() {
        super.onBackPressed();
       //Here you can stop your MediaPlayer
        if (mp != null && mp.isPlaying()) {
            mp.stop();
            mp.release();
        }
    }

【讨论】:

  • 这仅在我设置 MediaPlayer mp = null; 时有效谢谢你!
  • @DavidG 欢迎您的朋友,欢迎接受并点赞
【解决方案2】:
    Try this it's working for me   

     if (mp != null) {
                    mp.stop();
                    mp.release();
                    mp = null;
                    finish();
                }

【讨论】:

    【解决方案3】:

    您的代码没问题,只需在停止 null 播放器之前检查它

        super.onBackPressed();
    if (mp!=null && mp.isPlaying()) {
        mp.stop(); // or mp.pause();
        mp.release();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2014-07-16
      相关资源
      最近更新 更多