MediaPlayer getProgess - 值不正确

时间:2016-04-15 06:37:11

标签: android audio

我使用MediaPlayer播放一些录制的音频,SeekBar显示播放的进度。我的问题是:当我点击SeekBar跳转到时间位置时,会发生以下示例,当我想看到该进程时,我会看到日志:

  

getprogress(ms):10000
  getprogress(ms):9956
  getprogress(ms):10000

所以我跳到录制的音频的第10秒。 MediaPlayer跳到第10秒,但在它跳过后,你可以看到。

我尽我所能。我试过播放其他录音机的音频文件,但发生了同样的事情。尝试使用比特率和采样率,但发生了同样的事情。

我希望有人知道解决这个问题的方法。谢谢。

修改

代码:

搜索栏:

progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

        }

        @Override
         public void onStartTrackingTouch(SeekBar seekBar) {
            LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(receiver);
           // handler2.removeCallbacks(updateTimeTask);
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            if (PlayerForegroundService.player != null) {
             //   handler2.removeCallbacks(updateTimeTask);
                PlayerForegroundService.player.seekTo(seekBar.getProgress());
               // handler2.post(updateTimeTask);
                LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter(Constants.ACTION.PLAYER_UPDATE_UI));
            }
        }
    });
}

getProgess():

public int getProgress(){
    if ( player != null) {
        Log.i(Constants.DEFAULTS.LOG_TAG, ""+player.getCurrentPosition());
        return player.getCurrentPosition();
    }
    else
        return 0;
}    

调用getProgress时的代码:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {

    receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, final Intent intent) {
            actPosition.setText(intent.getStringExtra("formattedtimeplay"));
            progressBar.setProgress(PlayerForegroundService.player.getProgress());
            if (intent.getBooleanExtra("pausedplay", false))
                playButton.setImageResource(R.drawable.playfilled);
        }
    };
    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter(Constants.ACTION.PLAYER_UPDATE_UI));
    super.onCreate(savedInstanceState);
}    

1 个答案:

答案 0 :(得分:0)

我似乎解决了这个问题。之前,我曾经以秒为单位设置SeekBar的最大值。但是我设置了以毫秒为单位的最大值和seekTo的值(以毫秒为单位),它可以正常工作。