Android-Notification-通知的基本用法

通知(notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。

修改activity_main.xml,仅仅加入了一个按钮用于发送通知

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/send_notification"
        android:text="Send Notification"
        android:textAllCaps="false" />

</LinearLayout>

修改MainActivity.java

package com.example.notificationtest;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;


public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.d(TAG, "onCreate: execute");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建一个NotificationManager对通知进行管理
        NotificationManager manager = (NotificationManager)
                    getSystemService(NOTIFICATION_SERVICE);
        //创建channel
        NotificationChannel channel = new NotificationChannel("normal", "channelName",
                    NotificationManager.IMPORTANCE_HIGH);
        manager.createNotificationChannel(channel);
        //定义点击事件:
        Button buttonSendNotification = findViewById(R.id.send_notification);
        buttonSendNotification.setOnClickListener(v -> {
            Notification notification = new NotificationCompat.Builder(this, "normal")
                    .setContentTitle("This is content title")
                    .setContentText("This is content text")
                    .setWhen(System.currentTimeMillis())
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                    .setAutoCancel(true)
                    .build();
            Log.d(TAG, "onCreate: notify successfully");
            manager.notify(100, notification);
        });
    }

}

首先需要NotificationManager实例来管理通知,调用Context 的getSystemService()方法获取。getSystemService()方法接收一个字符串参数用于确定获取系统的哪个服务, 这里我们传入Context.NOTIFICATION_SERVICE 即可。

接下来使用NotificationChannel类构建一个通知channel,并调用NotificationManager的
createNotificationChannel()方法完成创建。由于NotificationChannel类和createNotificationChannel()方法都是Android 8.0系统中新增的API,因此在使用时还需进行版本判断createNotificationChannel()创建一个通知channel至少需要channel ID、channel 名称以及重要等级3个参数,其中ID可以随便定义,但保证全局唯一性。名称是展示给用户看的,需要清楚地表达channel的用途,重要等级主要有IMPORTANCE_HIGH、IMPORTANCE_DEFAULT、IMPORTANCE_LOW、IMPORTANCE_MIN这几种,对应的重要程度依次从高到低。不同的重要等级会决定通知的不同行为。

创建通知的详细步骤:  使用Notificationcompat类的Bulder构造器来创建Notification对象,NotificationCompat.Builder构造函数接收两个参数:第一个参数是context;第二个是channel ID,需要和我们在创建通知channel 时指定的渠道ID相匹配。可以在最终的build()方法之前连缀任意多的设置方法来创建一个丰富的Notification对象。setContentTitle()方法用于指定通知的标题内容,下拉系统状态栏就可以看到这部分内容。setContentText()方法用于指定通知的正文内容,同样下拉系统状态栏就可以看到这部分内容。setSmallIcon()方法用于设置通知的小图标,只能使用纯alpha图层的图片进行设置,小图标会显示在系统状态栏上。setLargeIcon()方法用于设置通知的大图标,下拉系统状态栏时,就可以看到设置的大图标。setWhen()设置通知被创建的时间,默认值是System.currentTimeMillis()。

以上工作完成后,只需调用NotificationManager的notify()方法就可以让通知显示出来。notify()方法接收两个参数:第一个参数是id,要保证为每个通知指定的id都是不同的;第二个参数是Notification对象,这里直接将创建好的Notification对象传入即可。

点击Send Notification按钮可以看到弹出了提示,下拉状态栏也可以看到通知。

 以上即Notification的简单用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值