Android - Notification 通知

1. 基本使用流程

状态通知栏主要涉及到2个类:Notification 和 NotificationManager

Notification: 通知信息类,它里面对应了通知栏的各个属性
NotificationManager: 是状态栏通知的管理类,负责发通知、清除通知等操作。

基本使用流程:

Step 1. 获得 NotificationManager 对象:NotificationManager mNManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Step 2. 创建一个通知栏的 Builder 构造类:Notification.Builder mBuilder = new Notification.Builder(this);
Step 3. 对 Builder 进行相关的设置,比如标题,内容,图标,动作等
Step 4. 调用 Builder 的 build() 方法为 notification 赋值
Step 5. 调用 NotificationManager的 notify() 方法发送通知

PS. 还可以调用 NotificationManager 的 cancel() 方法取消通知

2. 常用方法

首先创建 Builder 构造类

1
Notification.Builder mBuilder = new Notification.Builder(this);

然后再调用下述的相关的方法进行设置

setContentTitle(CharSequence):设置标题
setContentText(CharSequence):设置内容
setSubText(CharSequence):设置内容下面一小行的文字
setTicker(CharSequence):设置收到通知时在状态栏显示的文字信息
setWhen(long):设置通知时间,一般设置的是收到通知时的 System.currentTimeMillis()
setSmallIcon(int):设置右下角的小图标,在接收到通知的时候状态栏也会显示这个小图标
setLargeIcon(Bitmap):设置左边的大图标
setAutoCancel(boolean):用户点击 Notification 点击面板后是否让通知取消(默认不取消)
setDefaults(int):向通知添加声音、呼吸灯或震动效果的默认属性,可以组合多个属性

Notification.DEFAULT_VIBRATE(添加默认震动提醒)
Notification.DEFAULT_SOUND(添加默认声音提醒)
Notification.DEFAULT_LIGHTS(添加默认三色灯提醒)
Notification.DEFAULT_ALL(添加默认以上3种全部提醒)

3. 示例代码

Android O(Android 8.0) 以上需要创建通知频道 NotificationChannel 才可发布通知,见 6、18~22、43 行,这里不做赘述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@RequiresApi(api = Build.VERSION_CODES.O)
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private NotificationManager notificationManager;
private static final int NOTIFY_TAG = 1;
private static final String CHANNEL_ID = "鈴美的通知测试频道";
Bitmap largeIcon = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

largeIcon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round);
notificationManager = (NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);

// Android O(Android 8.0) 以上需要创建通知频道才可发布通知,这里不做赘述
NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_ID, NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setShowBadge(true);
notificationChannel.enableLights(true);
notificationChannel.enableVibration(true);
notificationManager.createNotificationChannel(notificationChannel);

Button btn1 = findViewById(R.id.btn1);
Button btn2 = findViewById(R.id.btn2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
Notification.Builder builder = new Notification.Builder(this);
builder.setContentTitle("Hello! I'm Hoshino suzumi")
.setContentText("ここは星野鈴美です。")
.setSubText("SubText")
.setTicker("Ticker")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(largeIcon)
.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE)
.setChannelId(CHANNEL_ID); // Android O(Android 8.0) 以上需要创建通知频道才可发布通知
Notification notification = builder.build();
notificationManager.notify(NOTIFY_TAG, notification);
break;
case R.id.btn2:
notificationManager.cancel(NOTIFY_TAG);
break;
}
}
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×