我使用相同的按鈕播放和暫停。它可以順利處理播放和暫停。但是音樂文件結束后,它無法再次播放。當我按下它時重新啟動應用程序。我使用 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條經驗 獲得超5個贊
問題
當您調用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
提交
取消