我正在尝试如下创建音乐播放器:
应用程序可以正常打开,播放暂停按钮可以正常工作,音量搜索器可以正常工作,但位置(搜索栏)不起作用。这是“覆盖”下面的代码。该应用程序不会崩溃,拖动搜索栏时没有错误信号,并且Logcat似乎工作正常(我认为),但它不会更改音频的位置。有人可以帮忙吗?
package com.example.playmusic;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.VideoView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
MediaPlayer mediaPlayer;
ImageButton playButton;
MediaPlayer mp;
AudioManager audioManager;
SeekBar positionBar;
SeekBar volumeBar;
public void playButtonClick (View view) {
if (!mp.isPlaying()) {
mp.start();
playButton.setBackgroundResource(R.drawable.pausebutton);
} else {
mp.pause();
playButton.setBackgroundResource(R.drawable.playbutton);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
playButton = (ImageButton) findViewById(R.id.playButton);
mp = MediaPlayer.create(this, R.raw.wishyouweregay);
SeekBar volumeControl = findViewById(R.id.volumeBar);
volumeControl.setMax(maxVolume);
volumeControl.setProgress(currentVolume);
volumeControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean fromUser) {
Log.i("Volume seekbar changed", Integer.toString(i));
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
final SeekBar positionBar = (SeekBar) findViewById(R.id.positionBar);
positionBar.setMax(mediaPlayer.getDuration());
positionBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.i("Position seekbar changed", Integer.toString(progress));
mediaPlayer.seekTo(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
positionBar.setProgress(mediaPlayer.getCurrentPosition());
}
}, 0, 300);}
});
} }