一个较为复杂的Androidstuio音乐播放器程序
时间: 2024-03-21 11:43:31 浏览: 12
一个比较复杂的 Android Studio 音乐播放器程序,需要实现以下功能:
1. 播放、暂停、停止音频。
2. 显示音频的总时长和当前播放进度。
3. 实现拖动进度条来调整音频的播放进度。
4. 允许用户选择并播放本地存储的音频文件。
以下是一个基本的实现步骤:
1. 在 Android Studio 中创建一个新项目。
2. 在 activity_main.xml 中添加以下组件:
* 一个 TextView 组件用于显示音频的总时长。
* 一个 TextView 组件用于显示当前播放进度。
* 一个 SeekBar 组件用于调整音频的播放进度。
* 一个 ListView 组件用于显示本地存储的音频文件列表。
* 一个播放按钮、暂停按钮和停止按钮。
3. 在 MainActivity.java 中添加以下代码:
```java
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private TextView durationTextView;
private TextView progressTextView;
private SeekBar seekBar;
private ListView listView;
private ArrayList<String> audioFiles;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
durationTextView = findViewById(R.id.durationTextView);
progressTextView = findViewById(R.id.progressTextView);
seekBar = findViewById(R.id.seekBar);
listView = findViewById(R.id.listView);
audioFiles = new ArrayList<>();
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, audioFiles);
listView.setAdapter(adapter);
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
stopAudio();
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
String audioFile = audioFiles.get(position);
playAudio(audioFile);
}
});
Button playButton = findViewById(R.id.playButton);
Button pauseButton = findViewById(R.id.pauseButton);
Button stopButton = findViewById(R.id.stopButton);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
} else {
mediaPlayer.start();
}
}
});
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mediaPlayer.pause();
}
});
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
stopAudio();
}
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mediaPlayer.seekTo(progress);
progressTextView.setText(getTimeString(progress));
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
loadAudioFiles();
}
private void loadAudioFiles() {
// Load audio files from local storage and add them to the audioFiles ArrayList.
// ...
adapter.notifyDataSetChanged();
}
private void playAudio(String audioFile) {
try {
mediaPlayer.reset();
AssetFileDescriptor afd = getAssets().openFd(audioFile);
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.prepare();
mediaPlayer.start();
durationTextView.setText(getTimeString(mediaPlayer.getDuration()));
progressTextView.setText(getTimeString(mediaPlayer.getCurrentPosition()));
seekBar.setMax(mediaPlayer.getDuration());
seekBar.setProgress(mediaPlayer.getCurrentPosition());
} catch (IOException e) {
e.printStackTrace();
}
}
private void stopAudio() {
mediaPlayer.stop();
mediaPlayer.reset();
seekBar.setProgress(0);
progressTextView.setText("00:00");
}
private String getTimeString(int milliseconds) {
int seconds = (milliseconds / 1000) % 60;
int minutes = (milliseconds / 1000) / 60;
return String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);
}
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.release();
}
}
```
注意:这只是一个基本的实现步骤,实际的应用可能需要更多的功能和细节处理。同时,为了更好的用户体验和应用性能,建议使用异步加载音频文件和处理音频播放等操作。