簡體   English   中英

播放媒體文件時,seekbar不會更新

[英]seekbar not updating when playing media file

我有帶播放音頻的布局的listview。在該布局中,當我單擊播放按鈕媒體文件時,我有seekbar和play / pause按鈕,但是seekbar沒有更新,我也是Runnable和handler的用戶,但它不起作用。 我在getview方法的baseadapter中這樣做。 請幫我解決這個問題

mAudioViewHolder.play.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
    String yofile = "file://" + filepath;
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {

        mediaPlayer.setDataSource(yofile);

    } catch (IllegalArgumentException | SecurityException | IllegalStateException | IOException e) {
        // TODO Auto-generated catch block
        Log.e("Node", "ERRORSS Part 1 is" + e);

        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                mAudioViewHolder.isPlaying = false;

                /**
                 * since audio is stop playing, remove its position value
                 * */
                playingAudioPosition = -1;
            }
        });
    }
    try {
        mediaPlayer.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.e("Node", "ERRORSS is Part 2 " + e);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.e("Node", "ERRORSS is  Part 3 " + e);
    } // might take long! (for buffering, etc)
    mediaPlayer.start();

    mAudioViewHolder.progressBar.setMax(mediaPlayer.getDuration());


    Runnable mRunnable = new Runnable() {

        @Override
        public void run() {
            if (mediaPlayer != null) {
                int mCurrentPosition = mediaPlayer.getCurrentPosition() / 1000;
                mAudioViewHolder.progressBar.setProgress(mCurrentPosition);
                Log.d("Node", "get current position " + mCurrentPosition);
            }

        }
    };
    Log.d("Node", "StartTime Updation " + mediaPlayer.getDuration() + "   " + mediaPlayer.getCurrentPosition());
    mHandler.postDelayed(mRunnable, 1000);
    //mAudioViewHolder.isPlaying = false;

}                               

當您每次要更新進度條時都需要調用可運行對象時,只需調用一次即可。

你可以這樣做

Runnable mRunnable = new Runnable() {

                                        @Override
                                        public void run() {
                                            if(mediaPlayer != null){
                                                int mCurrentPosition = mediaPlayer.getCurrentPosition() / 1000;
                                                mAudioViewHolder.progressBar.setProgress(mCurrentPosition);
                                                Log.d("Node", "get current position "+mCurrentPosition);
                                                mHandler.postDelayed(this, 1000);
                                            }

                                        }
                                    };
                                    Log.d("Node", "StartTime Updation "+mediaPlayer.getDuration()+"   "+mediaPlayer.getCurrentPosition());
                                    mHandler.postDelayed(mRunnable, 1000);

停止播放時,請確保從處理程序中刪除了可運行對象。

mHandler.removeCallbacks(mRunnable);

暫無
暫無

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

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