【发布时间】:2023-03-28 08:02:01
【问题描述】:
刚开始学习 Java,目前正在学习一些媒体基础知识。 我创建了一个小应用程序(播放音乐文件),带有一个可以正常工作的音量控制器搜索栏,一个播放和一个也可以正常工作的停止按钮。当音乐播放时,我设法到达那个点,进度搜索栏更新并向右移动,因为它需要在播放歌曲时做。当想要添加代码以实际能够改变音乐的进度时,每次搜索更新(每 1000 毫秒/1 秒)时,我都会暂停(延迟)。如果我添加
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) {
}
});
} }
【问题讨论】:
标签: java android android-mediaplayer android-seekbar