【问题标题】:Stop media player MP3 when back button pushed按下后退按钮时停止媒体播放器 MP3
【发布时间】:2013-06-20 20:08:15
【问题描述】:

我的代码工作正常,除非你按下后退按钮。

当我按下停止按钮并且音频检查屏幕返回到我的菜单屏幕时,名为“测试”的 MP3 文件停止播放。完美......一切都很好,直到我在手机上测试代码。当我使用 Android 手机上的手机后退按钮(不是我的应用程序上的停止按钮)退出时,媒体播放器会继续播放。我尝试了所有代码并查看了每个相关问题。我使用 onStop onPause finish keyevent.KEYCODE_BACK 等实现了代码,没有任何效果。我被难住了。

这是我的代码。如何通过按与此代码相关的 Android 后退按钮来停止此 MP3?

    public class Audio_Check extends Activity{

/* (non-Javadoc)
 * @see android.app.Activity#onCreate(android.os.Bundle)
 */

    import android.app.Activity;
    import android.content.Intent;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.View;
    import android.widget.Button;

    public class Audio_Check extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.audio_check);

    final MediaPlayer buttonSound = MediaPlayer.create(Audio_Check.this, R.raw.testing);

    Button stbutton = (Button) findViewById(R.id.startbutton);

    stbutton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound.start();



        }
    });
    Button spbutton = (Button) findViewById(R.id.stopbutton);

    spbutton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound.stop();
            buttonSound.release();
            Intent openE1 = new Intent("com.myapp.mysite.MENU");
            startActivity(openE1);


        }




    });


        }
    }

【问题讨论】:

    标签: android android-mediaplayer mp3 media


    【解决方案1】:

    把这个方法,

                @Override
        protected void onDestroy() {
    
            super.onDestroy();
    
            buttonSound.stop();
            buttonSound.reset();
            buttonSound.release();
            buttonSound = null;
        }
    

    希望它会起作用。

    【讨论】:

    • Mavani,谢谢你,但 ZouZou 的评论确实有效。当我使用后退按钮停止线程时,我可能会使用您的建议。
    • 它只工作过一次,现在它停止工作了。我把它下载到我的手机上,以防它是一个 Eclipse / Android Emulator 问题。它现在不起作用...我将尝试 onDestroy。
    【解决方案2】:

    我使用 onStop onPause finish keyevent.KEYCODE_BACK 实现了代码 以此类推,没有任何效果

    无需在onPauseonStop 中实现此功能,只需覆盖后退按钮并停止媒体播放器并完成活动即可。

    @Override
    public void onBackPressed(){
        if(buttonSound != null && buttonSound.isPlaying())
            buttonSound.stop();
        finish();
    }
    

    如果您使用低于 5 的 API:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if(buttonSound != null && buttonSound.isPlaying())
                buttonSound.stop();
            finish();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    

    【讨论】:

    • ZouZou.. 谢谢,但我尝试了这两个代码。我以前发现过它们。也许这是我插入代码但出现错误的地方...我正在使用版本:Eclipse Build id:20120920-0800 的 Juno Service Release 1 .... Programming Android 4.2..
    • 我应该把这段代码放在哪里,这样它才能工作,并且不会让 Eclipse 给我错误?我之前已经尝试过所有变体。也许我错过了什么。
    • 错误2...语法错误,插入“EnumBody”来完成BlockStatement
    • Inserting code in another area 我收到此错误... new View.OnClickListener(){} 类型的 onBackPressed() 方法必须覆盖或实现超类型方法
    • 我什至试过 >>>> @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO 自动生成的方法存根 if (keyCode==KeyEvent.KEYCODE_BACK) { if(buttonSound ! = null && buttonSound.isPlaying()) buttonSound.stop();结束();返回真; } 否则返回 super.onKeyDown(keyCode, event); } // 不好,因为 buttonSound 无法解析。我做错了什么?
    【解决方案3】:

    我睡不着。整夜不停地编码和研究,直到我开始工作。

    成功了!但是我必须在运行时根据详细的错误消息找出下一步。我必须取出“final and MediaPlayer”,否则当我通过模拟器运行它时,我会从 Eclipse 中强制关闭。编译代码时没有出现错误。

    MediaPlayer buttonSound ; // declared above first @Override
    
     // code after that
    

    // 从这里更改代码

    final MediaPlayer buttonSound = MediaPlayer.create(Audio_Check.this, R.raw.testing);
    

    //到这个

    buttonSound = MediaPlayer.create(Audio_Check.this, R.raw.testing);
    

    // 它可以工作 谢谢

    【讨论】:

      【解决方案4】:

      现在它可以工作了...这是问题所在

      注意buttonSound.start();被放在我的原始代码中?它在 }); 当我把它放在 });有效。显然它以前受到保护,但现在可以正常工作了。

      buttonSound = MediaPlayer.create(Audio_Check.this, R.raw.testing);
      
          Button stbutton = (Button) findViewById(R.id.stbutton);
      
          stbutton.setOnClickListener(new View.OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  // TODO Auto-generated method stub
      
      
              }
      
      
      
          });
          buttonSound.start();
      // onDestroy goes right here
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-22
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多