为了账号安全,请及时绑定邮箱和手机立即绑定

Media Player 不播放第二次

Media Player 不播放第二次

素胚勾勒不出你 2022-11-30 14:35:24
我使用相同的按钮播放和暂停。它可以顺利处理播放和暂停。但是音乐文件结束后,它无法再次播放。当我按下它时重新启动应用程序。我使用 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);                            }                        });                    }                }            });日志猫: java.lang.IllegalStateException    at android.media.MediaPlayer.isPlaying(Native Method)    at com.example.package.adapter.AdapterN$3.onClick(AdapterN.java:223)
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

//img1.sycdn.imooc.com//6386f9c60001c5f206580805.jpg

问题

当您调用release()aMediaPlayer时,它会释放之前分配的所有资源MediaPlayer.create(),因此不再可访问。这产生,

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

解决方案

你应该删除,

mp.release()

但是,您仍然可以使用release(),但在这种情况下,您必须再次MediaPlayer使用创建实例,

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

在适当的地方(即在访问任何开始、暂停、重置等之前)。

建议

  1. 始终MediaPlayeronCreate().

  2. onDestroy()在Use 之间释放 MediaPlayer 实例。

  3. 在创建和发布之间使用start/pause/resetAPI。


查看完整回答
反对 回复 2022-11-30
?
守候你守候我

TA贡献1802条经验 获得超10个赞

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

正如您在此处的文档中看到的那样,它声明在 release() 之后,该对象不再可用。

所以,我在这里建议的是你可以删除“mp.release()”并将它放在你的活动的 onDestroy() 下。


查看完整回答
反对 回复 2022-11-30
  • 2 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信