简体   繁体   English

Media Player第二次不播放

[英]Media Player doesn't play for the second time

I use same button for play and pause.It can handle play and pause smoothly.But after the music file end, it can not play it again.When I press it restart the application.I use mp.reset(); 我使用相同的按钮进行播放和暂停,它可以流畅地处理播放和暂停。但是音乐文件结束后,它无法再次播放。当我按下它时,重新启动应用程序。我使用mp.reset(); mp.release();.It doesn't help me in the case mp.release();。在这种情况下对我没有帮助

Java Code: Java代码:

final MediaPlayer mp1;

             mp1 = MediaPlayer.create(convertView.getContext().getApplicationContext(), convertView.getResources().getIdentifier(audiopath, "raw", convertView.getContext().getPackageName()));



            mHolder.play.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {



                    if (mp1.isPlaying()) {

                        mp1.pause();

                        mHolder.play.setImageResource(R.drawable.plays);


                    } else {


                        mp1.start();
                        mHolder.play.setImageResource(R.drawable.pause);
                        mp1.setOnCompletionListener(new OnCompletionListener() {
                            public void onCompletion(MediaPlayer mp) {

                                mp.reset();
                                mp.release();


                                mHolder.play.setImageResource(R.drawable.plays);



                            }




                        });




                    }




                }
            });

LogCat: LogCat:

 java.lang.IllegalStateException
    at android.media.MediaPlayer.isPlaying(Native Method)
    at com.example.package.adapter.AdapterN$3.onClick(AdapterN.java:223)

Its probably because of the "mp.release()": 其可能是因为“ mp.release()”:

As you can see in the documentation here , it state that after release(), the object is no longer available. 如您在此处的文档中所见,它指出release()之后,该对象不再可用。

So, what i would suggest here is you may just remove the "mp.release()" and put it under onDestroy() of your activity. 因此,我在这里建议您可以删除“ mp.release()”并将其放在活动的onDestroy()下。

https://developer.android.com/reference/android/media/MediaPlayer img ref img参考

Problem 问题

When you call release() of a MediaPlayer , it deallocates all its resources allocated with MediaPlayer.create() previously, hence no longer being accessible. 当您调用MediaPlayer release()时,它会取消分配先前通过MediaPlayer.create()分配的所有资源,因此不再可访问。 This produces, 这样会产生

java.lang.IllegalStateException at android.media.MediaPlayer.isPlaying(Native Method) at com.example.package.adapter.AdapterN$3.onClick(AdapterN.java:223) com.example.package.adapter.AdapterN $ 3.onClick(AdapterN.java:223)上android.media.MediaPlayer.isPlaying(本机方法)处的java.lang.IllegalStateException

Solution

You should remove, 你应该删除

mp.release()

However, you can still use release() but in that case you have to again create MediaPlayer instance using, 但是,您仍然可以使用release()但在这种情况下,您必须使用以下命令再次创建MediaPlayer实例:

mp1 = MediaPlayer.create(convertView.getContext().getApplicationContext(), convertView.getResources().getIdentifier(audiopath, "raw", convertView.getContext().getPackageName()));

in proper place (ie before accessing any start, pause, reset etc.). 在适当的位置(即在访问任何开始,暂停,重置等之前)。

Suggestions 意见建议

  1. Always create MediaPlayer instance in onCreate() . 始终在onCreate()创建MediaPlayer实例。
  2. Release MediaPlayer instance in onDestroy() Use in between. onDestroy()释放MediaPlayer实例。
  3. Use start/pause/reset APIs in between create and release. 在创建和发布之间使用start/pause/reset API。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM