Android Studio实现基于菜单选择的音乐播放器
时间: 2025-06-17 14:34:55 浏览: 9
### 实现基于菜单选择的音乐播放器
#### 项目创建与布局设计
在 Android Studio 中创建一个新的项目,并选择适当的模板。配置项目的名称、包名和语言。在 `res/layout/activity_main.xml` 文件中定义一个简单的布局,包含一个按钮用于控制播放/暂停,以及一个 `TextView` 用于显示当前播放的音乐名称[^3]。
```xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<Button
android:id="@+id/playPauseButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Play" />
<TextView
android:id="@+id/musicNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No music playing"
android:textSize="18sp"
android:layout_marginTop="16dp" />
</LinearLayout>
```
#### 菜单实现
在 `res/menu/` 目录下创建 `menu_main.xml` 文件,定义几个菜单项以供用户选择不同的音乐文件[^4]。
```xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_music1"
android:title="Music 1" />
<item
android:id="@+id/menu_music2"
android:title="Music 2" />
<item
android:id="@+id/menu_music3"
android:title="Music 3" />
</menu>
```
在 `MainActivity.java` 中重写 `onCreateOptionsMenu` 方法加载菜单,并在 `onOptionsItemSelected` 方法中处理菜单项的选择事件[^4]。
```java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_music1:
selectMusic(R.raw.music1);
return true;
case R.id.menu_music2:
selectMusic(R.raw.music2);
return true;
case R.id.menu_music3:
selectMusic(R.raw.music3);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
```
#### 音乐播放控制
在 `MainActivity.java` 中初始化 `MediaPlayer` 对象并实现播放、暂停和停止功能。将音乐文件放置在 `res/raw` 目录下[^3]。
```java
private MediaPlayer mediaPlayer;
private void selectMusic(int resource) {
if (mediaPlayer != null) {
mediaPlayer.release();
}
mediaPlayer = MediaPlayer.create(this, resource);
playMusic();
}
private void playMusic() {
if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
mediaPlayer.start();
updateUI("Playing");
}
}
private void pauseMusic() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
updateUI("Paused");
}
}
private void stopMusic() {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
updateUI("Stopped");
}
}
```
#### UI 更新
根据音乐的播放状态更新按钮文本和 `TextView` 的内容。通过调用 `updateUI` 方法实现[^3]。
```java
private void updateUI(String action) {
Button playPauseButton = findViewById(R.id.playPauseButton);
TextView musicNameTextView = findViewById(R.id.musicNameTextView);
if ("Playing".equals(action)) {
playPauseButton.setText("Pause");
musicNameTextView.setText("Now playing: Selected Music");
} else if ("Paused".equals(action)) {
playPauseButton.setText("Play");
} else if ("Stopped".equals(action)) {
playPauseButton.setText("Play");
musicNameTextView.setText("No music playing");
}
}
public void togglePlayback(View view) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
pauseMusic();
} else {
playMusic();
}
}
```
将 `togglePlayback` 方法绑定到按钮的点击事件上。
```xml
<Button
android:id="@+id/playPauseButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Play"
android:onClick="togglePlayback" />
```
#### 使用 Service 实现后台播放
为了支持后台播放,可以将 `MediaPlayer` 的逻辑封装到 `Service` 中[^4]。
创建 `MusicService.java` 文件,并在其中管理音乐播放。
```java
public class MusicService extends Service {
private static MediaPlayer mediaPlayer;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(this, R.raw.sample_music);
}
mediaPlayer.start();
return START_STICKY;
}
@Override
public void onDestroy() {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
```
在 `AndroidManifest.xml` 中注册服务。
```xml
<service android:name=".MusicService" android:enabled="true" android:exported="true" />
```
通过 `startService` 和 `stopService` 方法控制服务的启动与停止。
```java
Intent serviceIntent = new Intent(this, MusicService.class);
startService(serviceIntent); // 启动服务
stopService(serviceIntent); // 停止服务
```
###
阅读全文
相关推荐



















