创建通知栏
/** * 初始化通知栏 */ private NotificationManager notificationManager; static String PALYER_TAG; public Notification notification; private void initNotification() { /*通知栏的布局*/ RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_control); contentView.setImageViewResource(R.id.iv_pic, R.mipmap.icon_app);//图片展示 contentView.setImageViewResource(R.id.iv_play, R.mipmap.zant1);//button显示为正在播放 /*创建通知栏的点击事件*/ Intent notificationIntent = new Intent(getApplicationContext(), NotificationBroadcastReceiver.class); notificationIntent.setAction("notification_clicked"); notificationIntent.putExtra(NotificationBroadcastReceiver.TYPE, 1); PendingIntent intent = PendingIntent.getBroadcast(getApplicationContext(), 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT); /*滑动删除通知栏后,广播监听*/ Intent dele = new Intent(getApplicationContext(), NotificationBroadcastReceiver.class); dele.setAction("notification_cancelled"); dele.putExtra(NotificationBroadcastReceiver.TYPE, 1); PendingIntent deletIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, dele, PendingIntent.FLAG_ONE_SHOT); /*创建*/ NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), "music"); mBuilder.setContent(contentView) .setSmallIcon(R.mipmap.icon_app) .setWhen(System.currentTimeMillis())// 通知栏时间,一般是直接用系统的 .setPriority(Notification.DEFAULT_ALL)// .setContentIntent(intent)//点击事件 .setDeleteIntent(deletIntent);//滑动事件 notification = mBuilder.build(); // notification.flags = notification.FLAG_NO_CLEAR;//设置通知点击或滑动时不被清除 notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(PALYER_TAG, 111, notification);//开启通知 }
/** * 佛祖保佑 永无BUG * 佛曰: * 程序园里程序天,程序天里程序员; * 程序猿人写程序,又拿程序换肉钱。 * 肉饱继续桌前坐,饱暖还是桌前眠; * 半迷半醒日复日,码上码下年复年。 * 但愿叱咤互联世,不愿搬砖码当前; * 诸葛周瑜算世事,我算需求得加钱。 * 别人笑我忒直男,我说自己是程猿; * 但见成都府国内,处处地地程序员。 * 作者:水东流 编于 2018/8/23 * <p> * 音乐播放状态栏点击和滑动监听 */ public class NotificationBroadcastReceiver extends BroadcastReceiver { public static final String TYPE = "type"; //这个type是为了Notification更新信息的,这个不明白的朋友可以去搜搜,很多 @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); int type = intent.getIntExtra("type", -1); if (type != -1) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(type); } if (action.equals("notification_clicked")) { //处理点击事件 Intent intent1 = new Intent(context, MusicActivity.class); intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent1); } if (action.equals("notification_cancelled")) { //处理滑动事件 Intent intent2 = new Intent(context, MusicService.class); intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.stopService(intent2); } } }
广播注册
androidManfest 中静态注册
<!--关闭通知栏,通知音乐服务,关闭--> <receiver android:name=".NotificationBroadcastReceiver"> <intent-filter> <action android:name="notification_cancelled"/> <action android:name="notification_clicked"/> </intent-filter> </receiver>