一、简介
这是一篇介绍简单实现通知notification的文章,并不会太深入。只是让大家使用通知的时候,能够节省开发时间。详细使用步骤或者方法可以到官网查看API文档https://developer.android.google.cn/reference/android/support/v4/app/NotificationCompat.Builder。简单的给大家推荐一个工具类,后续若有更好的发现会及时更新。
二、效果预览
三、实现步骤
1、工具类
import android.annotation.TargetApi;
import android.app.AppOpsManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.support.annotation.RequiresApi;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.text.TextUtils;
import android.widget.RemoteViews;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import blcs.lwb.lwbtool.R;
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
import static android.content.Context.NOTIFICATION_SERVICE;
import static android.support.v4.app.NotificationCompat.PRIORITY_DEFAULT;
/**
* TODO 通知栏工具 BLCS
* https://developer.android.google.cn/reference/android/support/v4/app/NotificationCompat.Builder
*/
public class LinNotify {
public static final int RequestCode = 1;
public static final String NEW_MESSAGE = "chat";
public static final String NEW_GROUP = "chat_group";
public static final String OTHER_MESSAGE = "other";
public static final String Ticker = "您有一条新的消息";
public static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
public static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
public static int notifyId = 0;
/**
* TODO 适配 Android8.0 创建通知渠道
* tips:可以写在MainActivity中,也可以写在Application中,实际上可以写在程序的任何位置,
* 只需要保证在通知弹出之前调用就可以了。并且创建通知渠道的代码只在第一次执行的时候才会创建,
* 以后每次执行创建代码系统会检测到该通知渠道已经存在了,因此不会重复创建,也并不会影响任何效率。
*/
public static void setNotificationChannel(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String channelId = NEW_MESSAGE;
String channelName = "新消息通知";
createNotificationChannel(context, channelId, channelName, NotificationManager.IMPORTANCE_HIGH);
channelId = OTHER_MESSAGE;
channelName = "其他通知";
createNotificationChannel(context, channelId, channelName, NotificationManager.IMPORTANCE_HIGH);
}
}
/**
* 创建配置通知渠道
* @param channelId 渠道id
* @param channelName 渠道nanme
* @param importance 优先级
*/
@TargetApi(Build.VERSION_CODES.O)
private static void createNotificationChannel(Context context, String channelId, String channelName, int importance) {
// createNotifycationGroup(context,channelId,channelName);
NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
channel.setShowBadge(false);//禁止该渠道使用角标
// channel.setGroup(channelId); //设置渠道组id
// 配置通知渠道的属性
// channel .setDescription("渠道的描述");
// 设置通知出现时的闪灯(如果 android 设备支持的话)
channel.enableLights(true);
// 设置通知出现时的震动(如果 android 设备支持的话)
channel.enableVibration(false);
//如上设置使手机:静止1秒,震动2秒,静止1秒,震动3秒
// channel.setVibrationPattern(new long[]{1000, 2000, 1000,3000});
channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);//设置锁屏是否显示通知
channel.setLightColor(Color.BLUE);
channel.setBypassDnd(true);//设置是否可以绕过请勿打扰模式
NotificationManager notificationManager = (NotificationManager) context.getSystemService(
NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(channel);
}
/**
* 创建渠道组(若通知渠道比较多的情况下可以划分渠道组)
* @param groupId
* @param groupName
*/
@RequiresApi(api = Build.VERSION_CODES.O)
public static void createNotifycationGroup(Context context,String groupId, String groupName) {
NotificationChannelGroup group = new NotificationChannelGroup(groupId, groupName);
NotificationManager notificationManager = (N