音乐播放器往往需要在服务中执行具体的播放逻辑,因为只有只有我们才能保证在退出activity的情况下音乐能够继续播放,所以我们应当在activity中开启服务,然后让服务去执行具体的操作。
我们在avtivity的布局中写三个按钮,第一个是play,用来播放音乐,第二个是pause,用来暂停。第三个是exit,表示我们不打算继续播放音乐了。服务中的代码如下所示,
public class MyService extends Service {
//我们定义三个action,从activity开启服务时传递对应的action执行对应的操作。
private final static String ACTION_START = "play";
private final static String ACTION_PAUSE = "pause";
private final static String ACTION_EXIT = "exit";
private MediaPlayer mediaPlayer;
private boolean isPause = false;
public MyService() {
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String action = intent.getAction();
switch (action) {
case ACTION_START:
//在这里我们有相应的判断,因为音乐中的播放有两种一种是你之前播放音乐播放到一半按了暂停,这时如果按播放,那么我们让音乐继续播放,也就是直接执行start方法。
if (isPause) {
mediaPlayer.start();
isPause = true;
//如果我们第一次按播放,那么音乐从头播放,我们需要重置mediaplayer。
} else {
mediaPlayer = MediaPlayer.create(this,R.raw.lingshen);
mediaPlayer.start();
}
break;
case ACTION_PAUSE:
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
break;
case ACTION_EXIT: {
exit();
break;
}
default:
break;
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
exit();
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void exit() {
if (mediaPlayer != null) {
再退出时我们需要释放mediaplayer对象。
mediaPlayer.release();
mediaPlayer = null;
}
}
}
activity文件
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button play, pause, exit;
private final static String ACTION_START = "play";
private final static String ACTION_PAUSE = "pause";
private final static String ACTION_EXIT = "exit";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play = (Button) findViewById(R.id.button1);
pause = (Button) findViewById(R.id.button2);
exit = (Button) findViewById(R.id.button3);
play.setOnClickListener(this);
pause.setOnClickListener(this);
exit.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
startService(new Intent(ACTION_START, null, MainActivity.this, MyService.class));
break;
case R.id.button2:
startService(new Intent(ACTION_PAUSE, null, MainActivity.this, MyService.class));
break;
case R.id.button3:
startService(new Intent(ACTION_EXIT, null, MainActivity.this, MyService.class));
break;
default:
break;
}
}
}
mainfest文件
<service android:name=".MyService" android:enabled="true" android:exported="true"> <intent-filter > <action android:name="play" ></action> <action android:name="pause" ></action> <action android:name="exit" ></action> </intent-filter> </service>