Только что начал изучать Java, и в настоящее время я изучаю некоторые мультимедийные материалы. Я создал небольшое приложение (которое играет музыкальный файл) с помощью панели поиска регулятора громкости, которая отлично работает, кнопка воспроизведения и остановки, которая также отлично работает. Мне удалось добраться до этого момента, когда музыка воспроизводится, прогресс в поиске обновляется и перемещается вправо, как это нужно делать, когда играет песня. Когда вы хотите добавить код, чтобы реально изменить ход музыки, я получаю паузу (задержку) каждый раз, когда поиск обновляется (каждые 1000 миллисекунд/1 сек). Если я добавлю кодЗадержка поиска аудиофайлов Android
mplayer.seekTo(progress);
к коду, я получаю задержку музыки каждый раз при обновлении строки поиска (каждую секунду).
Вот мой код:
package com.dionisie.sounddemo;
import android.content.Context; import android.media.AudioManager;
import android.support.v7.app.AppCompatActivity; import
android.os.Bundle; import android.media.MediaPlayer; import
android.view.View; import android.widget.SeekBar; import
android.widget.SeekBar.OnSeekBarChangeListener; import
android.util.Log;
import java.util.Timer; import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
MediaPlayer mplayer;
AudioManager audioManager;
public void playAudio(View view) {
mplayer.start();
}
public void pauseAudio(View view) {
mplayer.pause();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mplayer = MediaPlayer.create(this, R.raw.joanna);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
SeekBar volumeControl = (SeekBar) findViewById(R.id.seekBar);
volumeControl.setMax(maxVolume);
volumeControl.setProgress(curVolume);
volumeControl.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
audioManager.setStreamVolume(audioManager.STREAM_MUSIC, progress, 0);
}
});
final SeekBar scrubber = (SeekBar) findViewById(R.id.scrubber);
scrubber.setMax(mplayer.getDuration());
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
scrubber.setProgress(mplayer.getCurrentPosition());
}
}, 0, 1000);
scrubber.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mplayer.seekTo(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
} }