展示一段用service实现本地音乐播放并通过Activity进行交互的示例代码
时间: 2024-05-01 07:17:26 浏览: 10
以下是一个用 service 实现本地音乐播放并通过 Activity 进行交互的示例代码:
1. 在 AndroidManifest.xml 文件中添加如下代码:
```
<service android:name=".MusicService" />
```
2. 创建 MusicService.java:
```java
public class MusicService extends Service implements MediaPlayer.OnPreparedListener {
private MediaPlayer mediaPlayer;
private String musicPath;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MusicBinder();
}
public void playMusic(String path) {
musicPath = path;
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);
} else {
mediaPlayer.reset();
}
try {
mediaPlayer.setDataSource(path);
mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
public void pauseMusic() {
if (mediaPlayer != null) {
mediaPlayer.pause();
}
}
public void resumeMusic() {
if (mediaPlayer != null) {
mediaPlayer.start();
}
}
public class MusicBinder extends Binder {
public MusicService getService() {
return MusicService.this;
}
}
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
@Override
public void onDestroy() {
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
super.onDestroy();
}
}
```
3. 创建 MusicActivity.java:
```java
public class MusicActivity extends AppCompatActivity {
private MusicService musicService;
private boolean isBound = false;
private TextView textView;
private EditText editText;
private Button playButton;
private Button pauseButton;
private Button resumeButton;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MusicService.MusicBinder binder = (MusicService.MusicBinder) service;
musicService = binder.getService();
isBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
isBound = false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music);
textView = findViewById(R.id.textView);
editText = findViewById(R.id.editText);
playButton = findViewById(R.id.playButton);
pauseButton = findViewById(R.id.pauseButton);
resumeButton = findViewById(R.id.resumeButton);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isBound) {
String path = editText.getText().toString();
musicService.playMusic(path);
}
}
});
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isBound) {
musicService.pauseMusic();
}
}
});
resumeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isBound) {
musicService.resumeMusic();
}
}
});
}
@Override
protected void onStart() {
super.onStart();
Intent intent = new Intent(this, MusicService.class);
bindService(intent, serviceConnection, BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
super.onStop();
if (isBound) {
unbindService(serviceConnection);
isBound = false;
}
}
}
```
4. 创建 activity_music.xml 布局文件:
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入本地音乐路径:" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="sdcard/music.mp3" />
<Button
android:id="@+id/playButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="播放" />
<Button
android:id="@+id/pauseButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="暂停" />
<Button
android:id="@+id/resumeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="继续" />
</LinearLayout>
```
通过这个示例代码,可以实现本地音乐的播放、暂停和继续操作,并且使用 service 可以在后台进行音乐播放,同时又可以与 Activity 进行交互。