我使用相同的按钮播放和暂停。它可以顺利处理播放和暂停。但是音乐文件结束后,它无法再次播放。当我按下它时重新启动应用程序。我使用 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个赞
问题
当您调用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()));
在适当的地方(即在访问任何开始、暂停、重置等之前)。
建议
始终
MediaPlayer
在onCreate()
.onDestroy()
在Use 之间释放 MediaPlayer 实例。在创建和发布之间使用
start/pause/reset
API。
添加回答
举报
0/150
提交
取消