Android歌词秀设计思路(3)通用的音乐播放服务(上)
MediaPlayerService作为通用的音乐播放Service类,它的功能有:
控制音乐播放,停止,暂停,前/后歌曲切换。
Audio Focus相关处理(对应应用程序切换)。
Intent处理(对应多媒体键,耳机线拔出,打入电话)
Notification处理
其实这个类本来是和LyricPlayerService在一起的,但是随着功能的增加代码越来越乱。于是就有了分开的想法。但是分也要分出点名堂,于是为这个类定义的功能就是实现一个通用的媒体播放服务。
分开后的类关系可以从下面的全体图中看出。
下面针对各功能加以说明
控制音乐播放,停止,暂停,前/后歌曲切换。
在开始真正的工作之前要解决的一个问题是:作为通用的音乐播放那个服务,就一定会还有在后台时播放前/后一首歌的要求。但是这是应用已经不存在了,不可能把这个任务交个Activie来处理。为了解决这个问题定义了一个用于取得相应的媒体文件信息的MediaInfoProvider类。
public interface MediaInfoProvider{
String getUrl();
String getTitle();
boolean moveToNext();
boolean moveToPrev();
}
通过调用moveToNext和moveToPrev方法实现媒体文件的切换,然后通过调用getUrl和getTitle来取得文件的信息。
注意在这里只是规定接口,真正的实例必须由利用者通过下面的方法来提供。有一点额外的工作就是如果希望播放的歌曲和正在播放的不一样的话就先停止正在播放的歌曲。
public void setMediaInfoProvider(MediaInfoProvider provider) {
if( mDataSource != provider.getUrl() && (isStop() == false)){
stop();
}
mMediaInfoProvider = provider;
mDataSource = provider.getUrl();
mTitle = provider.getTitle();
}
当然在利用MediaPlayer之前我们需要onCreate方法中进行一些准备工作。内容包括
创建MediaPlayer对象,
设定唤醒方式(目的是防止播放中CPU进入休眠状态,记得在 AndroidManifest.xml中设定权限为android.permission.WAKE_LOCK)
指定播放完了后的监听器。
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mMediaPlayer.setOnCompletionListener(this);
这个播放完了监听器的目的有两个。一个是停止任务栏上的图标显示,另外一个是在没有前台应用的时候自动关闭本服务。要是没有人管了怎么办?对吧。
@Override
public void onCompletion(MediaPlayer mp) {
mIsPausing = false;
mNotificationManager.cancel(NOTIFICATION);
if(mBinded == false){
stopSelf();
}
}
相关新闻>>
- 发表评论
-
- 最新评论 更多>>