| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- package com.jld.vod.audio;
- import android.annotation.SuppressLint;
- import android.app.Notification;
- import android.app.NotificationChannel;
- import android.app.NotificationManager;
- import android.app.PendingIntent;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Build;
- import android.widget.ImageView;
- import android.widget.RemoteViews;
- import com.jld.vod.R;
- import com.jld.vod.view.MainActivity;
- /**
- * Created by ding on 2016/12/3.
- * 状态栏的音频播放控制器
- */
- public class MusicNotification {
- /**
- * 音频播放控制 的 Notification
- * 动态的显示后台的AudioplayService的前台展示
- */
- private static MusicNotification notifyInstance = null;
- // 通知id
- private final int FLAG = PendingIntent.FLAG_UPDATE_CURRENT;
- private final int NOTIFICATION_ID = 0x1213;
- // 通知
- private Notification musicNotifi = null;
- // 管理通知
- private NotificationManager manager = null;
- // 界面实现
- private Notification.Builder builder = null;
- // 上下文
- private Context context;
- MusicController musicController;
- // 布局
- private RemoteViews remoteViews;
- private Intent playsIntent = null;
- /**
- * 上一首 按钮点击 ID
- */
- private final static int BUTTON_PREV_ID = 1;
- /**
- * 播放/暂停 按钮点击 ID
- */
- private final static int BUTTON_PALY_ID = 2;
- /**
- * 下一首 按钮点击 ID
- */
- private final static int BUTTON_NEXT_ID = 3;
- /**
- * 关闭 按钮点击 ID
- */
- private final static int BUTTON_COSE_ID = 4;
- /**
- * 跳转播放界面 按钮点击 ID
- */
- private final static int BUTTON_JUMP_ID = 5;
- private final static String ACTION_BUTTON = "xinkunic.aifatushu.customviews.MusicNotification.ButtonClick";
- private final static String INTENT_BUTTONID_TAG = "ButtonId";
- private ImageView imageView;
- private MusicNotification() {
- }
- private MusicNotification(Context context, MusicController musicController) {
- this.context = context;
- this.musicController = musicController;
- // 初始化操作
- remoteViews = new RemoteViews(context.getPackageName(), R.layout.music_view_custom_button);
- builder = new Notification.Builder(context);
- // 初始化控制的Intent
- playsIntent = new Intent();
- playsIntent.setAction(ACTION_BUTTON);
- imageView = new ImageView(context);
- onCreateMusicNotifi(context);
- }
- /**
- * 恶汉式实现 通知
- *
- * @return
- */
- public static MusicNotification getMusicNotification(Context context, MusicController musicController) {
- if (notifyInstance == null) {
- synchronized (MusicNotification.class) {
- if (notifyInstance == null) {
- notifyInstance = new MusicNotification(context, musicController);
- }
- }
- }
- return notifyInstance;
- }
- /**
- * 创建通知
- * 初始化通知
- */
- @SuppressLint("NewApi")
- public void onCreateMusicNotifi(Context context) {
- // 设置点击事件
- manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
- // manager = NotificationManagerCompat.from(context);
- registerClick();
- Intent intent1 = new Intent(context, MainActivity.class);
- intent1.putExtra("isHead", true);
- PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
- //
- builder.setContent(remoteViews).setWhen(System.currentTimeMillis())
- .setContentIntent(pendingIntent)
- .setOngoing(true)
- .setSmallIcon(R.mipmap.ic_launcher);
- //Android 8.0以后
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- NotificationChannel channel = new NotificationChannel(context.getPackageName(), "有章音频", NotificationManager.IMPORTANCE_HIGH);
- channel.enableLights(false);
- channel.enableVibration(false);
- channel.setVibrationPattern(new long[]{0});
- channel.setSound(null, null);
- manager.createNotificationChannel(channel);
- builder.setChannelId(context.getPackageName());
- } else {
- builder.setVibrate(new long[]{0});
- builder.setSound(null);
- }
- musicNotifi = builder.build();
- initButtonReceiver(context);
- }
- private void registerClick() {
- // 1.注册播放或暂停点击事件
- playsIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_PALY_ID);
- PendingIntent pplay = PendingIntent.getBroadcast(context, 1, playsIntent, FLAG);
- remoteViews.setOnClickPendingIntent(R.id.btn_custom_play, pplay);
- // 2.注册上一首点击事件
- playsIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_PREV_ID);
- PendingIntent playPre = PendingIntent.getBroadcast(context, 3, playsIntent, FLAG);
- remoteViews.setOnClickPendingIntent(R.id.btn_custom_prev, playPre);
- // 3.注册下一首点击事件
- playsIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_NEXT_ID);
- PendingIntent pnext = PendingIntent.getBroadcast(context, 2, playsIntent, FLAG);
- remoteViews.setOnClickPendingIntent(R.id.btn_custom_next, pnext);
- // 4.注册关闭点击事件
- playsIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_COSE_ID);
- PendingIntent pclose = PendingIntent.getBroadcast(context, 4, playsIntent, FLAG);
- remoteViews.setOnClickPendingIntent(R.id.btn_custom_close, pclose);
- }
- private void initButtonReceiver(Context context) {
- ButtonBroadcastReceiver bReceiver = new ButtonBroadcastReceiver();
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(ACTION_BUTTON);
- context.registerReceiver(bReceiver, intentFilter);
- }
- /**
- * 取消通知栏
- */
- public void onCancelMusicNotifi() {
- if (manager == null) return;
- manager.cancel(NOTIFICATION_ID);
- isShowing = false;
- }
- private String TAG = "---MusicNotification--";
- private boolean isPlaying = false;
- /**
- * 更新通知
- */
- public void upDataNotifacation(boolean needRefrush, final String name, String faceUrl, boolean isPlaying) {
- this.isPlaying = isPlaying;
- if (remoteViews == null) {
- return;
- }
- if (needRefrush) {
- remoteViews.setTextViewText(R.id.tv_custom_song_singer, name);
- }
- if (isPlaying) {
- remoteViews.setImageViewResource(R.id.btn_custom_play, android.R.drawable.ic_media_pause);
- } else {
- remoteViews.setImageViewResource(R.id.btn_custom_play, android.R.drawable.ic_media_play);
- }
- show();
- }
- boolean isShowing = false;
- private void show() {
- // if (isShowing) {
- // return;
- // }
- manager.notify(NOTIFICATION_ID, musicNotifi);
- isShowing = true;
- }
- public class ButtonBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- String action = intent.getAction();
- if (action.equals(ACTION_BUTTON)) {
- int buttonId = intent.getIntExtra(INTENT_BUTTONID_TAG, 0);
- switch (buttonId) {
- case BUTTON_PREV_ID://上一首
- if (musicController != null) {
- musicController.pre();
- }
- break;
- case BUTTON_PALY_ID://播放或暂停
- if (musicController != null) {
- if (musicController.isPlaying()) {
- musicController.pause();
- } else {
- musicController.play();
- }
- }
- break;
- case BUTTON_NEXT_ID://下一首
- if (musicController != null) {
- musicController.next();
- }
- break;
- case BUTTON_COSE_ID://关闭
- onCancelMusicNotifi();
- if (musicController != null) {
- musicController.release();
- }
- break;
- default:
- break;
- }
- }
- }
- }
- }
|