자바를 배우기 시작했으며 현재 일부 미디어 기본 사항을 배우고 있습니다. 음량 조절기 탐색 막대가 잘 작동하는 작은 응용 프로그램 (음악 파일을 재생 함)을 만들었습니다. 재생 및 정지 버튼도 제대로 작동합니다. 음악이 재생 될 때까지 그 지점까지 도달 할 수 있었고, 진행 상황은 바 업데이트를 찾으며 노래가 재생 될 때 필요한대로 오른쪽으로 이동합니다. 음악의 진행 상황을 실제로 변경할 수있는 코드를 추가하려는 경우 검색이 업데이트 될 때마다 (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) {
}
});
} }