我使用相同的按钮进行播放和暂停,它可以平稳地处理播放和暂停。但是音乐文件结束后,它无法再次播放。当我按下它时,重新启动应用程序。我使用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)
答案 0 :(得分:2)
可能是因为“ mp.release()”引起的:
正如您在文档here中所看到的,它指出release()之后,该对象不再可用。
因此,我在这里建议您可以删除“ mp.release()”并将其放在活动的onDestroy()下。
答案 1 :(得分:2)
https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreignoreCase
当您调用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
放在适当的位置(即在访问任何开始,暂停,重设等之前)。
mp1 = MediaPlayer.create(convertView.getContext().getApplicationContext(), convertView.getResources().getIdentifier(audiopath, "raw", convertView.getContext().getPackageName()));
中创建MediaPlayer
实例。 onCreate()
中的实例之间使用。 onDestroy()
API。