前言:
android为通知增加了一些特性——Channel,Channel可以帮助用户统一管理通知,开发者可以为不同类型的通知创建同一个通知Channel,所有使用同一个Channel的通知都具有相同的行为。
行为包括:
- 重要性
- 声音
- 闪光灯
- 振动
- 在锁屏上显示
- 替换免打扰模式
通知只有第一次运行时可以通过代码设置通知Channel的行为,用户之后可以通过Settings来更改通知Channel的行为,之后程序将无法通过代码来修改Channel
一:简介
Notification是显示在手机状态栏的通知——手机状态栏位于手机屏幕的最上方,那里一般是显示手机当前的网络状态,电池状态,时间等。
Notification代表全局效果的通知,一般通过NotificationManager服务来发送Notification。
Notification支持文字内容显示、震动、三色灯、铃声等多种提示形式
二:使用
1. 重要的参数
1). NotificationManager
NotificationManager : 是状态栏通知的管理类,负责发通知、清除通知等操作。
注意:NotificationManager 是一个系统Service,所以必须通过getSystemService(NOTIFICATION_SERVICE)方法来获取,方法如下。
NotificationManager mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
2). Notification
Notification为通知信息类,它里面对应了通知栏的各个属性,可以Notification.Builder类来创建
3). Notification.Builder
Notification.Builder提供了如下常用方法:
- setDefaults():设置通知LED灯,音乐,振动等
- setAutoCancel():设置点击通知后,状态栏自动删除通知
- setContentTitle();设置通知标题
- setContentText():设置通知内容
- setSmalIcon():为通知设置图标
- setLargeIcon():为通知设置大图标
- setTick():设置通知在状态栏的提示文本
- setContentIntent():设置点击通知后将要启动的程序组件对应的pendingIntent
4). Channel
用于统一管理通知的
2. 发送通知的步骤
- 调用getSystemService(NOTIFICATION_SERVICE)来获取系统服务NotificationChannel
- 创建NotificationChannel对象,并在NotificationManger上创建该Channel对象
- 通过构造器创建一个Notification.Builder设置通知的各种属性
- 为Notificaiton.Builder设置通知的各种参数
- 创建MessagingStyle和Message,通过Message设置消息内容,为Notification.Builder设置MessagingStyle后创建Notification
- 通过NotificationManager发送Notification
三:示例
public class FirstActivity extends Activity {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
//获取NotificationManager
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
//设置Channel ID和Name以及 importance
String channelId = "yesmola";
String channelName = "myNoti";
int channelImportance = NotificationManager.IMPORTANCE_HIGH;
//构建Channel 通知通道
NotificationChannel channel = new NotificationChannel(channelId, channelName, channelImportance);
manager.createNotificationChannel(channel);
}
@RequiresApi(api = Build.VERSION_CODES.O)
public void sendNoti(View view){
//需要NotificationManager
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
//可以过得Notification
Notification notification = new Builder(this,"yesmola")
.setContentTitle("这是我的通知")
.setContentText("我的通知可真好看")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.search)
.setAutoCancel(true)
.setShowWhen(true)
.setColor(Color.RED) //这是用来设置小图标的颜色
.build();
manager.notify(1,notification);
}
}