首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android mediaplayer不是完全追求进步

Android mediaplayer不是完全追求进步
EN

Stack Overflow用户
提问于 2013-04-25 14:08:35
回答 1查看 243关注 0票数 1

我正在尝试使用媒体播放器播放.wav文件。实际上,到目前为止我已经完成了如下所示的工作。它正在正确地播放更新进度,但媒体播放器没有完全解决问题。Media-player在文件的总持续时间之前停止提供进度,并停止更新进度。我也实现了OnComplete listener也没有得到回调。这是我的代码,任何人都可以找出我缺失的地方。

代码语言:javascript
复制
public void playAudioFile() {
    try {

        mMediaPlayer.reset();
        setMediaPlayerSource();
        mMediaPlayer.prepare();
        mMediaPlayer.start();
        mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer arg0) {
                Graphbar.setProgress(mMediaPlayer.getDuration());
            }
        });
        bPlay.setBackgroundResource(R.drawable.pause_selector);

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Playing");
                updateProgressBar();
            }
        }).start();

    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
    public void updateProgressBar() {
    Graphbar.setProgress(0);

    Graphbar.setMax(mMediaPlayer.getDuration());
    mHandler.postDelayed(mUpdateTimeTask, 0);
}
private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {
        if(mMediaPlayer.isPlaying()){
        long totalDuration = Graphbar.getMax();
        long currentDuration =mMediaPlayer.getCurrentPosition();

        String TotalDur = Utilities.milliSecondsToTimer(totalDuration);

        tvTimeRight.setText(TotalDur);
        tvTimeLeft.setText(""+ Utilities.milliSecondsToTimer(currentDuration));

        System.out.println(currentDuration+"/"+totalDuration);
        Graphbar.setProgress((int)currentDuration); 
        mHandler.postDelayed(this, 1);
        }
    }
};
private void setMediaPlayerSource() {
        String audioFile = getFilename();
        try {
            mMediaPlayer.setDataSource(audioFile);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2013-04-27 19:47:10

对于总持续时间,请使用mediaplayer.getduration。从可运行的处理程序中删除不必要的代码,因为它将创建对您的搜索栏的加载。因为在,每隔一秒,u就会计算一些东西,并根据这个计算更新

我建议你使用安卓的chronometer视图。

代码语言:javascript
复制
public void playAudioFile() {
    try {

        mMediaPlayer.reset();
        setMediaPlayerSource();
        mMediaPlayer.prepare();
        mMediaPlayer.start();
        mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer arg0) {
                Graphbar.setProgress(mMediaPlayer.getDuration());
            }
        });
        bPlay.setBackgroundResource(R.drawable.pause_selector);
        //set this only for once , because for one song total duration is always constant.

     updateProgressBar();
}
    public void updateProgressBar() {
    Graphbar.setProgress(0); 

    Graphbar.setMax(mMediaPlayer.getDuration());
    mHandler.postDelayed(mUpdateTimeTask, 0);

    long totalDuration = mMediaPlayer.getDuration();
    String TotalDur = Utilities.milliSecondsToTimer(totalDuration);

        tvTimeRight.setText(TotalDur);
}
private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {

        if(mMediaPlayer.isPlaying()){
        //long totalDuration = mMediaPlayer.getDuration();=> no need of calculating total time and updating it to seekbar at every second 

        long currentDuration =mMediaPlayer.getCurrentPosition();


        tvTimeLeft.setText(""+ Utilities.milliSecondsToTimer(currentDuration));

        System.out.println(currentDuration+"/"+totalDuration);
        Graphbar.setProgress((int)currentDuration); 
        mHandler.postDelayed(this, 1);
        }
    }
};
private void setMediaPlayerSource() {
        String audioFile = getFilename();
        try {
            mMediaPlayer.setDataSource(audioFile);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16207569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档