簡體   English   中英

Media Player第二次不播放

[英]Media Player doesn't play for the second time

我使用相同的按鈕進行播放和暫停,它可以流暢地處理播放和暫停。但是音樂文件結束后,它無法再次播放。當我按下它時,重新啟動應用程序。我使用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)

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

如您在此處的文檔中所見,它指出release()之后,該對象不再可用。

因此,我在這里建議您可以刪除“ mp.release()”並將其放在活動的onDestroy()下。

https://developer.android.com/reference/android/media/MediaPlayer img參考

問題

當您調用MediaPlayer release()時,它會取消分配先前通過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. 始終在onCreate()創建MediaPlayer實例。
  2. onDestroy()釋放MediaPlayer實例。
  3. 在創建和發布之間使用start/pause/reset API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM