0
ちょうど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) {
}
});
} }