Media Player第二次不播放

时间:2019-05-15 16:09:06

标签: java android

我使用相同的按钮进行播放和暂停,它可以平稳地处理播放和暂停。但是音乐文件结束后,它无法再次播放。当我按下它时,重新启动应用程序。我使用mp.reset();。 mp.release();。这种情况对我没有帮助

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:

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

2 个答案:

答案 0 :(得分:2)

可能是因为“ mp.release()”引起的:

正如您在文档here中所看到的,它指出release()之后,该对象不再可用。

因此,我在这里建议您可以删除“ mp.release()”并将其放在活动的onDestroy()下。

答案 1 :(得分:2)

https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreignoreCase https://developer.android.com/reference/android/media/MediaPlayer

问题

当您调用release()中的MediaPlayer时,它会取消分配先前用MediaPlayer.create()分配的所有资源,因此不再可访问。这样会产生

  

java.lang.IllegalStateException       在android.media.MediaPlayer.isPlaying(本机方法)       在com.example.package.adapter.AdapterN $ 3.onClick(AdapterN.java:223)

解决方案

您应该删除

mp.release()

但是,您仍然可以使用release(),但是在这种情况下,您必须使用{p>

MediaPlayer

放在适当的位置(即在访问任何开始,暂停,重设等之前)。

建议

  1. 始终在mp1 = MediaPlayer.create(convertView.getContext().getApplicationContext(), convertView.getResources().getIdentifier(audiopath, "raw", convertView.getContext().getPackageName())); 中创建MediaPlayer实例。
  2. 发布MediaPlayer onCreate()中的实例之间使用。
  3. 在创建和发布之间使用onDestroy() API。
相关问题