取自开源的代码,比较实用,我们常用的也就是系统默认的情况,这里可以一个方法搞定
package com.example.burro.demo.appframework.util;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.SystemClock;
import android.support.v7.app.NotificationCompat;
import android.widget.RemoteViews;
import android.widget.Toast;
import java.util.ArrayList;
/**
* 适用各种通知类型的工具类
*/
@SuppressLint("NewApi")
public class NotifyUtils {
private static final int FLAG = Notification.FLAG_INSISTENT;
int requestCode = (int) SystemClock.uptimeMillis();
private int NOTIFICATION_ID;
private NotificationManager nm;
private Notification notification;
private NotificationCompat.Builder cBuilder;
private Notification.Builder nBuilder;
private Context mContext;
public NotifyUtils(Context context, int ID) {
this.NOTIFICATION_ID = ID;
mContext = context;
nm = (NotificationManager) mContext
.getSystemService(Activity.NOTIFICATION_SERVICE);
cBuilder = new NotificationCompat.Builder(mContext);
}
/**
* 设置在顶部通知栏中的各种信息
*
* @param pendingIntent
* @param smallIcon
* @param ticker
*/
private void setCompatBuilder(PendingIntent pendingIntent, int smallIcon, String ticker,
String title, String content, boolean sound, boolean vibrate, boolean lights) {
cBuilder.setContentIntent(pendingIntent);
cBuilder.setSmallIcon(smallIcon);
cBuilder.setTicker(ticker);
cBuilder.setContentTitle(title);
cBuilder.setContentText(content);
cBuilder.setWhen(System.currentTimeMillis());
cBuilder.setAutoCancel(true);
cBuilder.setPriority(NotificationCompat.PRIORITY_MAX);
int defaults = 0;
if (sound) {
defaults |= Notification.DEFAULT_SOUND;
}
if (vibrate) {
defaults |= Notification.DEFAULT_VIBRATE;
}
if (lights) {
defaults |= Notification.DEFAULT_LIGHTS;
}
cBuilder.setDefaults(defaults);
}
/**
* 设置builder的信息,在用大文本时会用到这个
*
* @param pendingIntent
* @param smallIcon
* @param ticker
*/
private void setBuilder(PendingIntent pendingIntent, int smallIcon, String ticker, boolean sound, boolean vibrate, boolean lights) {
nBuilder = new Notification.Builder(mContext);
nBuilder.setContentIntent(pendingIntent);
nBuilder.setSmallIcon(smallIcon);
nBuilder.setTicker(ticker);
nBuilder.setWhen(System.currentTimeMillis());
nBuilder.setPriority(Notification.PRIORITY_MAX);
int defaults = 0;
if (sound) {
defaults |= Notification.DEFAULT_SOUND;
}
if (vibrate) {
defaults |= Notification.DEFAULT_VIBRATE;
}
if (lights) {
defaults |= Notification.DEFAULT_LIGHTS;
}
nBuilder.setDefaults(defaults);
}
/**
* 普通的通知
* <p/>
* 1. 侧滑即消失,下拉通知菜单则在通知菜单显示
*
* @param pendingIntent
* @param smallIcon
* @param ticker
* @param title
* @param content
*/
public void notify_normal_singline(PendingIntent pendingIntent, int smallIcon,
String ticker, String title, String content, boolean sound, boolean vibrate, boolean lights) {
setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, sound, vibrate, lights);
sent();
}
/**
* 进行多项设置的通知(在小米上似乎不能设置大图标,系统默认大图标为应用图标)
*
* @param pendingIntent
* @param smallIcon
* @param ticker
* @param title
* @param content
*/
public void notify_mailbox(PendingIntent pendingIntent, int smallIcon, int largeIcon, ArrayList<String> messageList,
String ticker, String title, String content, boolean sound, boolean vibrate, boolean lights) {
setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, sound, vibrate, lights);
/**
// 删除时
Intent deleteIntent = new Intent(mContext, DeleteService.class);
int deleteCode = (int) SystemClock.uptimeMillis();
// 删除时开启一个服务
PendingIntent deletePendingIntent = PendingIntent.getService(mContext,
deleteCode, deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT);
cBuilder.setDeleteIntent(deletePendingIntent);
**/
Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), largeIcon);
cBuilder.setLargeIcon(bitmap);
cBuilder.setDefaults(Notification.DEFAULT_ALL);
cBuilder.setAutoCancel(true);
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
for (String msg : messageList) {
inboxStyle.addLine(msg);
}
inboxStyle.setSummaryText("[" + messageList.size() + "条]" + title);
cBuilder.setStyle(inboxStyle);
sent();
}
/**
* 自定义视图的通知
*
* @param remoteViews
* @param pendingIntent
* @param smallIcon
* @param ticker
*/
public void notify_customview(RemoteViews remoteViews, PendingIntent pendingIntent,
int smallIcon, String ticker, boolean sound, boolean vibrate, boolean lights) {
setCompatBuilder(pendingIntent, smallIcon, ticker, null, null, sound, vibrate, lights);
notification = cBuilder.build();
notification.contentView = remoteViews;
nm.notify(NOTIFICATION_ID, notification);
}
/**
* 可以容纳多行提示文本的通知信息 (因为在高版本的系统中才支持,所以要进行判断)
*
* @param pendingIntent
* @param smallIcon
* @param ticker
* @param title
* @param content
*/
public void notify_normail_moreline(PendingIntent pendingIntent, int smallIcon, String ticker,int MessageID,
String title, String content, boolean sound, boolean vibrate, boolean lights) {
final int sdk = Build.VERSION.SDK_INT;
if (sdk < Build.VERSION_CODES.JELLY_BEAN) {
notify_normal_singline(pendingIntent, smallIcon, ticker, title, content, sound, vibrate, lights);
} else {
setBuilder(pendingIntent, smallIcon, ticker, true, true, false);
nBuilder.setContentTitle(title);
nBuilder.setContentText(content);
nBuilder.setPriority(Notification.PRIORITY_HIGH);
notification = new Notification.BigTextStyle(nBuilder).bigText(content).build();
notification.flags = Notification.FLAG_AUTO_CANCEL;
nm.notify(MessageID, notification);
}
}
/**
* 有进度条的通知,可以设置为模糊进度或者精确进度
*
* @param pendingIntent
* @param smallIcon
* @param ticker
* @param title
* @param content
*/
public void notify_progress(PendingIntent pendingIntent, int smallIcon,
String ticker, String title, String content, boolean sound, boolean vibrate, boolean lights) {
setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, sound, vibrate, lights);
new Thread(new Runnable() {
@Override
public void run() {
int incr;
for (incr = 0; incr <= 100; incr += 10) {
cBuilder.setProgress(100, incr, false);
sent();
try {
Thread.sleep(1 * 500);
} catch (InterruptedException e) {
LogUtils.e("Exception Log",e.toString());
}
}
cBuilder.setContentText("下载完成").setProgress(0, 0, false);
sent();
}
}).start();
}
/**
* 容纳大图片的通知
*
* @param pendingIntent
* @param smallIcon
* @param ticker
* @param title
* @param bigPic
*/
public void notify_bigPic(PendingIntent pendingIntent, int smallIcon, String ticker,
String title, String content, int bigPic, boolean sound, boolean vibrate, boolean lights) {
setCompatBuilder(pendingIntent, smallIcon, ticker, title, null, sound, vibrate, lights);
NotificationCompat.BigPictureStyle picStyle = new NotificationCompat.BigPictureStyle();
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = true;
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(),
bigPic, options);
picStyle.bigPicture(bitmap);
picStyle.bigLargeIcon(bitmap);
cBuilder.setContentText(content);
cBuilder.setStyle(picStyle);
sent();
}
/**
* 里面有两个按钮的通知
*
* @param smallIcon
* @param leftbtnicon
* @param lefttext
* @param leftPendIntent
* @param rightbtnicon
* @param righttext
* @param rightPendIntent
* @param ticker
* @param title
* @param content
*/
public void notify_button(int smallIcon, int leftbtnicon, String lefttext, PendingIntent leftPendIntent, int rightbtnicon, String righttext, PendingIntent rightPendIntent, String ticker,
String title, String content, boolean sound, boolean vibrate, boolean lights) {
requestCode = (int) SystemClock.uptimeMillis();
setCompatBuilder(rightPendIntent, smallIcon, ticker, title, content, sound, vibrate, lights);
cBuilder.addAction(leftbtnicon,
lefttext, leftPendIntent);
cBuilder.addAction(rightbtnicon,
righttext, rightPendIntent);
sent();
}
public void notify_HeadUp(PendingIntent pendingIntent, int smallIcon, int largeIcon,
String ticker, String title, String content, int leftbtnicon, String lefttext, PendingIntent leftPendingIntent, int rightbtnicon, String righttext, PendingIntent rightPendingIntent, boolean sound, boolean vibrate, boolean lights) {
setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, sound, vibrate, lights);
cBuilder.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), largeIcon));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cBuilder.addAction(leftbtnicon,
lefttext, leftPendingIntent);
cBuilder.addAction(rightbtnicon,
righttext, rightPendingIntent);
} else {
Toast.makeText(mContext, "版本低于Andriod5.0,无法体验HeadUp样式通知", Toast.LENGTH_SHORT).show();
}
sent();
}
/**
* 发送通知
*/
private void sent() {
notification = cBuilder.build();
nm.notify(NOTIFICATION_ID, notification);
}
/**
* 根据id清除通知
*/
public void clear() {
nm.cancelAll();
}
}