java - 按下后退按钮并再次打开应用程序后媒体播放器崩溃

标签 java android media-player

我的应用程序启动时有一个菜单,您可以点击一个按钮来启动该应用程序。一旦启动媒体播放器就开始播放,但如果我单击后退按钮,单击按钮再次启动应用程序,然后单击按钮停止音乐,应用程序就会崩溃。这是该代码。它在手机上崩溃,但在模拟器中运行良好。任何评论将不胜感激。谢谢

int cancion = 1, cancion1 = 1;
MediaPlayer song, song1, song2, song3, song4;
if (cancion == 1)
    {
        song1.start();
        playing = true;
        song1.setLooping(true);
        song = song1;
    }
music.setOnLongClickListener(new View.OnLongClickListener() {

    public boolean onLongClick(View view) {
            song.pause();
            song.seekTo(0);
            playing = false;
            cancion = cancion+1;

            if (cancion == 5)
            {
                cancion = 1;
            }
            if (cancion == 1)
            {
                song1.start();
                playing = true;
                song1.setLooping(true);
                song = song1;
            }
            else if (cancion == 2)
            {
                song2.start();
                playing = true;
                song2.setLooping(true);
                song = song2;
            }
            else if (cancion == 3)
            {
                song3.start();
                playing = true;
                song3.setLooping(true);
                song = song3;
            }
            else if (cancion == 4)
            {
                song4.start();
                playing = true;
                song4.setLooping(true);
                song = song4;
            }

        return true;
    }
});
    music.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            if (!playing)
            {
                song.start();
                playing = true;
            }

            else
            {
                song.pause();
                song.seekTo(0);
                playing = false;
                cancion1 = 2;
            }
        }
});
@Override
protected void onResume() {
    super.onResume();
    if(!song.isPlaying() && cancion1 != 2)
    {
        song.start();
        playing = true;
    }
}
@Override
public void onPause(){
    super.onPause();
    if(song.isPlaying())
    {
        song.pause();
        song.seekTo(0);
        playing = false;
    }
}

日志猫:

04-22 22:12:47.151: W/ActivityNative(12915): 发送 ACTIVITY_IDLE_TRANSACTION 04-22 22:12:47.541:W/dalvikvm(12915):threadid = 1:线程因未捕获的异常而退出(组= 0x400207d8) 04-22 22:12:47.551:E/AndroidRuntime(12915):致命异常:主要 04-22 22:12:47.551:E/AndroidRuntime(12915):java.lang.NullPointerException 04-22 22:12:47.551:E/AndroidRuntime(12915):在com.try.player.DragActivity $ 5.onClick(DragActivity.java:1772) 04-22 22:12:47.551:E/AndroidRuntime(12915):在android.view.View.performClick(View.java:2408) 04-22 22:12:47.551: E/AndroidRuntime(12915): 在 android.view.View$PerformClick.run(View.java:8816) 04-22 22:12:47.551:E/AndroidRuntime(12915):在android.os.Handler.handleCallback(Handler.java:587) 04-22 22:12:47.551:E/AndroidRuntime(12915):在android.os.Handler.dispatchMessage(Handler.java:92) 04-22 22:12:47.551:E/AndroidRuntime(12915):在android.os.Looper.loop(Looper.java:123) 04-22 22:12:47.551:E/AndroidRuntime(12915):在android.app.ActivityThread.main(ActivityThread.java:4633) 04-22 22:12:47.551:E/AndroidRuntime(12915):在java.lang.reflect.Method.invokeNative( native 方法) 04-22 22:12:47.551:E/AndroidRuntime(12915):在java.lang.reflect.Method.invoke(Method.java:521) 04-22 22:12:47.551: E/AndroidRuntime(12915): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 04-22 22:12:47.551:E/AndroidRuntime(12915):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 04-22 22:12:47.551:E/AndroidRuntime(12915):在dalvik.system.NativeStart.main( native 方法)

最佳答案

更改您的 onPause() 以释放所有 MediaPlayer 对象,而不是尝试重新启动当前正在播放的歌曲。

类似这样的事情:

@Override
public void onPause(){
    super.onPause();

    song.release();
    song1.release();
    //and so on

}

关于java - 按下后退按钮并再次打开应用程序后媒体播放器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273289/

相关文章:

java - 检测文件何时保存

java - 带开关的 Android 编码(字符串)

java - 如何将 SlidingDrawer 作为系统覆盖层?

安卓 "No content provider found for permission revoke"

安卓媒体播放器问题

java - 遍历 JAXB 中的元素

java - 如何在 Play2 scala 模板中设置所选选项?

java - 如何停止从 weblogic 容器中的 servlet 生成的线程?

c# - Windows Media Player 视频无缝循环

android - MediaPlayer.setDataSource 导致有效文件的 IOException