2016-04-15 2 views
0

Я использую MediaPlayer для воспроизведения некоторых записанных аудио и SeekBar, чтобы показать ход игры. Моя проблема: когда я нажимаю на SeekBar, чтобы перейти к позиции времени в следующем примере происходит, и я вижу на журнале, когда я хочу видеть ход процесса:MediaPlayer getProgess - неправильные значения

getprogress (мс): 10000
getprogress (мс): 9956
getprogress (мс): 10000

Так что переход на 10-й секунду записанного звука в. MediaPlayer переходит на 10-ю секунду, но после того, как он отскакивает назад, как вы можете видеть.

Я пробовал все, что мог. Я попытался воспроизвести звуковые файлы другого рекордера, но произошло то же самое. Пробовал играть с битрейтом и частотой дискретизации, но так же.

Я надеюсь, что кто-то знает решение этого. Спасибо.

Edit:

Код:

SeekBar:

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

где вы регистрируете этот прогресс? Я думаю, чтобы получить точное значение, вы должны проверить его на onSeekComplete() onSeekCompleteListener ... – Opiatefuchs

+0

где ваш 'MediaPlayer.OnSeekCompleteListener'? – pskink

ответ

0

Кажется, я решил проблему. Раньше я использовал максимальное значение SeekBar в секундах. Но после того, как я установил max в миллисекундах и значения seekTo в миллисекундах, он отлично работает.

Смежные вопросы