android - 退出应用程序或电话铃声时媒体播放器停止播放歌曲

标签 android eclipse android-mediaplayer

当我按主页按钮或接听电话时,我的歌曲没有停止?当歌曲停止时,我的计时器也不会停止吗?有什么办法可以停止我的计时器吗?你能帮我一下吗?

public class MainActivity extends Activity {

    private Button start, stop;
    private MediaPlayer mp;
    private TextView display, comment;

    private TextView timerValue;

    private long startTime = 0L;

    private Handler customHandler = new Handler();

    long timeInMilliseconds = 0L;
    long timeSwapBuff = 0L;
    long updatedTime = 0L;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        timerValue = (TextView) findViewById(R.id.timerValue);
        start = (Button) findViewById(R.id.bStart);
        start.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                mp = MediaPlayer.create(MainActivity.this, R.raw.splahsound);
                mp.start();
                startTime = SystemClock.uptimeMillis();
                customHandler.postDelayed(updateTimerThread, 0);

                mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                    @Override
                    public void onCompletion(MediaPlayer mp) {

                        mp.stop();
                        mp.reset();
                        mp.release(); // free up memory
                        mp = null;

                    }

                });

            }
        });

        stop = (Button) findViewById(R.id.bDur);
        stop.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                if (mp != null) {
                    try {

                        mp.stop();
                        mp.reset();
                        mp.release();
                        mp = null;

                    } catch (Exception e) {
                        Log.d("error", e.toString());
                    }
                }
                timeSwapBuff += timeInMilliseconds;
                customHandler.removeCallbacks(updateTimerThread);
                            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();       
    }

    private Runnable updateTimerThread = new Runnable() {

        public void run() {

            timeInMilliseconds = SystemClock.uptimeMillis() - startTime;

            updatedTime = timeSwapBuff + timeInMilliseconds;

            int secs = (int) (updatedTime / 1000);
            int mins = secs / 60;
            secs = secs % 60;
            // int milliseconds = (int) (updatedTime % 1000);
            timerValue.setText("" + mins + ":" + String.format("%02d", secs));
            customHandler.postDelayed(this, 0);
        }

    };

}

最佳答案

您可以在 onPause 方法中停止 MediaPlayer:

@Override
protected void onPause() {
    //stop mediaplayer:
    if (mp != null && mp.isPlaying()) {
        mp.stop();
    }
    super.onPause();       
}

而不是:

@Override
protected void onPause() {
    super.onPause();       
}

注意:检查 MediaPlayer 当前是否正在播放非常重要,因为调用 stop()当前未播放的 MediaPlayer 上的方法将抛出 IlegalStateException。

关于android - 退出应用程序或电话铃声时媒体播放器停止播放歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23065671/

相关文章:

android - 是否可以在通话期间播放音乐以便对方可以听到?安卓

java - Eclipse 在启动时崩溃(eclipse.exe 已停止工作),任何解决方案?

android - 命令模式传递应用程序的 Activity 方法?

java - 告诉 Eclipse 跳过测试

java - MediaPlayer.setDataSource(String)不适用于本地文件

android - MediaPlayer.OnInfoListener "code 703"是什么?

来自 CursorWindow 的 java.lang.IllegalStateException : Couldn't read row 0, col -1 - Android sqlite 问题

java - 从 SQLite 存储和检索对象

java - eclipse 删除逗号的按键绑定(bind)

java - TestNG:如何以编程方式运行自定义 TestNG.XML 文件