最近要制作一个后台播放音乐的功能,可是在UI中不给控制按钮,于是只好通过通知栏来控制了,网上找了许多,没有找到相关的文章,经过不断摸索,终于实现了该功能,在此记录下来,即作为备忘,也可作为分享。
1、首先,创建一个service来播放音乐:
public class AudioService extends Service {
private MediaPlayer mediaPlayer;
private final static String TAG = "debug";
public ButtonBroadcastReceiver bReceiver;
public final static String ACTION_BUTTON = "com.weidongjian.weigan.ButtonClick";
public NotificationManager mNotificationManager;
@Override
public void onCreate() {
super.onCreate();
Log.i("debug", "oncrete");
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource("http://abv.cn/music/%E5%85%89%E8%BE%89%E5%B2%81%E6%9C%88.mp3");
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
initButtonReceiver();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("debug", "onStartCommnad");
if (!mediaPlayer.isPlaying()){
mediaPlayer.start();
}
showButtonNotify();
return START_STICKY;
}
public void onDestroy(){
Log.i("debug", "onDestory");
//super.onDestroy();
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
我在onCreate里面,初始化了MediaPlayer对象,并用于播放网络地址音乐,并有一个初始化Receive的公式: initButtonReceiver();,这个留到后面讲。
2、第二部是创建一个Notification了,这个在网上有许多的资源了,我这里用的是remoteView创建一个自定义的Notification,而且在控制音乐这里,只能用remoteView;
public void showButtonNotify(){
Notification.Builder mBuilder = new Notification.Builder(this);
RemoteViews mRemoteViews = new RemoteViews(getPackageName(), R.layout.view_custom_button);
mRemoteViews.setImageViewResource(R.id.custom_song_icon, R.drawable.sing_icon);
mBuilder.setContent(mRemoteViews)
.setContentIntent(getDefalutIntent(Notification.FLAG_ONGOING_EVENT))
.setWhen(System.currentTimeMillis())// 通知产生的时间,会在通知信息里显示
.setTicker("正在播放")
.setPriority(Notification.PRIORITY_DEFAULT)// 设置该通知优先级
.setOngoing(true)
.setSmallIcon(R.drawable.sing_icon);
Notification notify = mBuilder.build();
notify.flags = Notification.FLAG_ONGOING_EVENT;