Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MediaPlayer GetProges-值不正确_Android_Audio - Fatal编程技术网

Android MediaPlayer GetProges-值不正确

Android MediaPlayer GetProges-值不正确,android,audio,Android,Audio,我正在使用MediaPlayer播放一些录制的音频,SeekBar显示播放进度。我的问题是:当我点击SeekBar跳转到某个时间位置时,会出现以下示例,我想查看进度时会在日志上看到: getprogress(毫秒):10000 getprogress(ms):9956 获取进度(毫秒):10000 所以我跳到录音的第10秒。MediaPlayer跳到第10秒,但正如您所看到的那样,之后它会向后跳一点 我尽力了。我试着播放其他录音机的音频文件,但发生了同样的事情。尝试使用比特率和采样率,但结果相同

我正在使用
MediaPlayer
播放一些录制的音频,
SeekBar
显示播放进度。我的问题是:当我点击
SeekBar
跳转到某个时间位置时,会出现以下示例,我想查看进度时会在日志上看到:

getprogress(毫秒):10000
getprogress(ms):9956
获取进度(毫秒):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));
            }
        }
    });
}
getProges():

调用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);
}    

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

请发布您的代码。您将此进度记录在哪里?我认为要获得准确的值,您应该在onSeekCompleteListener的onSeekComplete()中检查它…您的
MediaPlayer在哪里。onSeekCompleteListener
?应用程序没有
onSeekCompleteListener
,因此添加该侦听器
@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);
}