Android 音乐APP(五)音乐通知栏、后台播放音乐(1)

在第四篇文章的到最后显示了通知栏,那么为什么我要把通知的的操作单独放到一篇文章来进行讲解呢?因为里面有很多业务逻辑,还有通信的关系,所以才这么做的。

① 通知栏按钮点击监听


要实现具体的业务功能,首先要监听到点击事件,这一点是毋庸置疑的,谁赞成,谁反对。首先增加几个全局变量,打开Constant

/**

  • 歌曲播放

*/

public static final String PLAY = “play”;

/**

  • 歌曲暂停

*/

public static final String PAUSE = “pause”;

/**

  • 上一曲

*/

public static final String PREV = “prev”;

/**

  • 下一曲

*/

public static final String NEXT = “next”;

/**

  • 关闭通知栏

*/

public static final String CLOSE = “close”;

/**

  • 进度变化

*/

public static final String PROGRESS = “progress”;

这些都是用来表明当前歌曲的状态的,至关重要。之前我通过RemoteViews来指定一个布局文件,从而实现自定义通知栏样式的效果,那么对于通知栏页面的按钮的点击事件,也是交给RemoteViews来完成来的,下面进行实例化,把它变成成员变量。

在Service中实例化

private static RemoteViews remoteViews;

然后单独写一个方法对RemoteViews进行初始化配置。

/**

  • 初始化自定义通知栏 的按钮点击事件

*/

private void initRemoteViews() {

remoteViews = new RemoteViews(this.getPackageName(), R.layout.notification);

//通知栏控制器上一首按钮广播操作

Intent intentPrev = new Intent(PREV);

PendingIntent prevPendingIntent = PendingIntent.getBroadcast(this, 0, intentPrev, 0);

//为prev控件注册事件

remoteViews.setOnClickPendingIntent(R.id.btn_notification_previous, prevPendingIntent);

//通知栏控制器播放暂停按钮广播操作 //用于接收广播时过滤意图信息

Intent intentPlay = new Intent(PLAY);

PendingIntent playPendingIntent = PendingIntent.getBroadcast(this, 0, intentPlay, 0);

//为play控件注册事件

remoteViews.setOnClickPendingIntent(R.id.btn_notification_play, playPendingIntent);

//通知栏控制器下一首按钮广播操作

Intent intentNext = new Intent(NEXT);

PendingIntent nextPendingIntent = PendingIntent.getBroadcast(this, 0, intentNext, 0);

//为next控件注册事件

remoteViews.setOnClickPendingIntent(R.id.btn_notification_next, nextPendingIntent);

//通知栏控制器关闭按钮广播操作

Intent intentClose = new Intent(CLOSE);

PendingIntent closePendingIntent = PendingIntent.getBroadcast(this, 0, intentClose, 0);

//为close控件注册事件

remoteViews.setOnClickPendingIntent(R.id.btn_notification_close, closePendingIntent);

}

目前通知栏上看到的按钮只有四个,因为播放和暂停是一个按钮,到时候可以根据MediaPlayer的播放状态做进一步的处理,上面四个按钮,点击之后会发送一个广播,既然有广播,那自然要有一个广播接收器,就好比,你到淘宝上买衣服,别人给你发货了,你总要设置一个收货地址吧。这是一个道理的。至于广播接收器,可以写在Service里面,作为一个内部类使用。那么先创建这个内部类。

/**

  • 广播接收器 (内部类)

*/

public class MusicReceiver extends BroadcastReceiver {

public static final String TAG = “MusicReceiver”;

@Override

public void onReceive(Context context, Intent intent) {

//UI控制

UIControl(intent.getAction(), TAG);

}

}

然后来看看UIControl方法。

/**

  • 页面的UI 控制 ,通过服务来控制页面和通知栏的UI

  • @param state 状态码

  • @param tag

*/

private void UIControl(String state, String tag) {

switch (state) {

case PLAY:

BLog.d(tag,PLAY+" or "+PAUSE);

break;

case PREV:

BLog.d(tag,PREV);

break;

case NEXT:

BLog.d(tag,NEXT);

break;

case CLOSE:

BLog.d(tag,CLOSE);

break;

default:

break;

}

}

对应四个通知

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值