MediaPlayer getProgess - 不正确的值

问题描述:

我使用MediaPlayer播放一些录制的音频和SeekBar来显示播放的进度。我的问题是:当我在SeekBar点击跳转至下面的例子发生在一个时间位置,我看到在登录时,我希望看到的陆侃:MediaPlayer getProgess - 不正确的值

getprogress(毫秒):10000个
getprogress( MS):9956
getprogress(毫秒):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); 
}  
+0

请发布您的代码。 –

+0

你在哪里记录这个进度?我想要得到一个确切的值,你应该检查onSeekCompleteListener onSeekComplete()... – Opiatefuchs

+0

哪里是你的'MediaPlayer.OnSeekCompleteListener'? – pskink

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