![](https://s5-media.51cto.com/ost/pc/static/noavatar.gif)
回复
本项目旨在开发一个基于鸿蒙系统的音乐播放器应用,具备如下功能:
音乐播放器的核心功能主要依赖于鸿蒙的MediaPlayer
API。同时,通过自定义 Notification 实现音乐播放的后台运行,以增加用户体验。
graph TD
A[启动应用] --> B[选择音乐文件]
B --> C[加入播放列表]
C --> D[点击播放按钮]
D --> E{MediaPlayer调用}
E --> F[加载音乐文件]
F --> G[开始播放]
G --> H[控制音量/播放进度]
H --> I[后台播放通知]
I --> J[结束播放]
MediaPlayer
实例并设置相关监听器。MediaPlayer
开始加载并播放选中的音频文件。MediaPlayer
资源。public class MusicPlayerActivity extends Ability {
private MediaPlayer mediaPlayer;
private List<String> playlist = new ArrayList<>();
private int currentTrackIndex = 0;
@Override
protected void onStart(Intent intent) {
super.onStart(intent);
setUIContent(ResourceTable.Layout_ability_music_player);
mediaPlayer = new MediaPlayer();
initListeners();
// Example to add files to the playlist
playlist.add("dataability:///audio/song1.mp3");
playlist.add("dataability:///audio/song2.mp3");
}
private void initListeners() {
findComponentById(ResourceTable.Id_play_button).setClickedListener(listener -> playMusic());
findComponentById(ResourceTable.Id_pause_button).setClickedListener(listener -> pauseMusic());
Slider volumeSlider = (Slider) findComponentById(ResourceTable.Id_volume_slider);
volumeSlider.setValueChangedListener((slider, value, fromUser) -> setVolume(value));
Slider progressSlider = (Slider) findComponentById(ResourceTable.Id_progress_slider);
progressSlider.setValueChangedListener((slider, value, fromUser) -> seekTo(value));
}
private void playMusic() {
if (!mediaPlayer.isNowPlaying()) {
mediaPlayer.reset();
mediaPlayer.setSource(playlist.get(currentTrackIndex));
mediaPlayer.prepare();
mediaPlayer.play();
showNotification();
}
}
private void pauseMusic() {
if (mediaPlayer.isNowPlaying()) {
mediaPlayer.pause();
}
}
private void setVolume(int value) {
mediaPlayer.setVolume((float) value / 100);
}
private void seekTo(int value) {
mediaPlayer.seekTo(value);
}
private void showNotification() {
NotificationRequest notificationRequest = new NotificationRequest(1);
notificationRequest.setContentTitle("Music Player");
notificationRequest.setContentText("Playing: " + playlist.get(currentTrackIndex));
getSystemService(NotificationManager.class).notify(1, notificationRequest);
}
@Override
protected void onStop() {
super.onStop();
if (mediaPlayer.isNowPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
}
@Test
public void testPlayMusic() {
MusicPlayerActivity activity = new MusicPlayerActivity();
activity.onStart(null);
activity.playMusic();
assertTrue(activity.mediaPlayer.isNowPlaying());
}
@Test
public void testPauseMusic() {
MusicPlayerActivity activity = new MusicPlayerActivity();
activity.onStart(null);
activity.playMusic();
activity.pauseMusic();
assertFalse(activity.mediaPlayer.isNowPlaying());
}
通过本项目,我们成功创建了一个功能齐全的音乐播放器,熟悉了鸿蒙中的MediaPlayer
API及其播放控制。同时,实现了后台播放通知,使得用户体验更加流畅。