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);
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); Notification notification = builder.build(); notificationManager.notify(NOTIFY_TAG, notification); break; case R.id.btn2: notificationManager.cancel(NOTIFY_TAG); break; } } }
|