在播放媒体文件的时候,需要保证设备不会锁屏或者进入休眠状态。可以使用WakeLock来实现:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
wl.acquire();
使用完MediaPlayer后释放WakeLock:
if (mp != null) {
mp.release();
mp = null;
}
if (wl != null) {
wl.release();
wl = null;
}
在服务中使用startForeground方法可以将服务设置为前台服务,这样系统就不会轻易地停止服务了。
private void startForeground() {
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("Foreground Service")
.setContentText("Media Player is running")
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pendingIntent)
.build();
startForeground(1, notification);
}
然后在播放媒体文件的时候,调用此方法:
private void startMediaPlayer() {
if (mp != null) {
mp.release();
mp = null;
}
mp = new MediaPlayer();
mp.setDataSource("http://example.com/song.mp3");
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
startForeground();
}
});
mp.prepareAsync();
}
这样,就可以解决MediaPlayer在前台服务中播放2分钟后停止的问题了。