Android中通知的简单使用

本文介绍了在Android 8.0及以上和以下版本如何使用通知,包括在Android 8.0中引入的通知渠道概念,强调了通知渠道对用户体验的改善和管理。同时提供了兼容不同Android版本的通知代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于在Android 8.0之后,对通知进行过重大的调整和加入了一些新的功能,所以本篇文章将分别介绍,在Android 8.0中和在Android 8.0以下的版本中怎么使用通知,以及怎么在Android 8.0和Android 8.0以下的版本中兼容使用通知。

在Android 8.0以下的版本中使用通知,代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button mBtn_Send_Notice;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn_Send_Notice = findViewById(R.id.btn_send_notification);
        mBtn_Send_Notice.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_send_notification:
                // 调用getSystemService()方法得到一个NotificationManager的实例
                NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

                Intent intent = new Intent(MainActivity.this, DisplayActivity.class);
                // 设置一个待定意图,因为我们是在活动中跳转,所以使用getActivity()方法得到实例,在广播中和服务中应使用getBroadcast()和getService来得到实例
                PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);

                NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
                // 设置标题
                builder.setContentTitle("这是标题");
                // 设置内容
                builder.setContentText("这是内容");
                // 系统显示时间
                builder.setWhen(System.currentTimeMillis());
                // 设置收到通知后状态栏显示的小图标
                builder.setSmallIcon(R.mipmap.ic_launcher);
                // 设置收到通知后,通知右边显示的大图标
                builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
                //设置点击通知后,取消通知
                builder.setAutoCancel(true);
                // 设置点击通知后要跳转的待定意图
                // 因为我们上面设置了一个待定意图,设置跳转到另一个活动,意思就是点击通知后跳转的地方
                builder.setContentIntent(pi);

                // 通过调用NotificationCompat.Builder对象的build方法得到一个Notification的实例
                Notification notification = builder.build();
                // 发送通知,此处的1是id值,这个值可以自己随便取,但要全局唯一
                manager.notify(1, notification);
                break;
            default:
        }
    }
}

这里我是设置了一个按钮,并通过点击按钮来发送一条通知,效果图如下:

在这里插入图片描述
以上程序只能在Android 8.0以下的版本中使用

在Android 8.0及以上版本中使用通知,代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button mBtn_Send_Notice;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn_Send_Notice = findViewById(R.id.btn_send_notification);
        mBtn_Send_Notice.setOnClickListener(this);
    }



    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_send_notification:
                // 调用getSystemService()方法得到一个NotificationManager的实例
                NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

                // 创建渠道
                // 以下的message为渠道Id,通知消息为渠道名,这是给用户看的, NotificationManager.IMPORTANCE_HIGH为通知的重要等级
                NotificationChannel channel = new NotificationChannel("message", "通知消息", NotificationManager.IMPORTANCE_HIGH);
                manager.createNotificationChannel(channel);

                Intent intent = new Intent(MainActivity.this, DisplayActivity.class);
                // 设置一个待定意图,因为我们是在活动中跳转,所以使用getActivity()方法得到实例,在广播中和服务中应使用getBroadcast()和getService来得到实例
                PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);

                // 此处的message为渠道Id,表示这个通知属于哪个渠道
                NotificationCompat.Builder builder = new NotificationCompat.Builder(this,"message");
                // 设置标题
                builder.setContentTitle("这是标题");
                // 设置内容
                builder.setContentText("这是内容");
                // 系统显示时间
                builder.setWhen(System.currentTimeMillis());
                // 设置收到通知后状态栏显示的小图标
                builder.setSmallIcon(R.mipmap.ic_launcher);
                // 设置收到通知后,通知右边显示的大图标
                builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
                //设置点击通知后,取消通知
                builder.setAutoCancel(true);
                // 设置点击通知后要跳转的待定意图
                // 因为我们上面设置了一个待定意图,设置跳转到另一个活动,意思就是点击通知后跳转的地方
                builder.setContentIntent(pi);

                // 通过调用NotificationCompat.Builder对象的build方法得到一个Notification的实例
                Notification notification = builder.build();
                // 发送通知,此处的1是id值,这个值可以自己随便取,但要全局唯一
                manager.notify(1, notification);
                break;
            default:
        }
    }
}


现在运行一下代码,效果图如下:
在这里插入图片描述
与在Android 8.0以下的版本中使用通知的代码比较,你会发现,就多了一个渠道,没错,就是这个渠道。

从Android 8.0系统开始,Google引入了通知渠道这个概念。

什么是通知渠道呢?顾名思义,就是每条通知都要属于一个对应的渠道。每个App都可以自由地创建当前App拥有哪些通知渠道,但是这些通知渠道的控制权都是掌握在用户手上的。用户可以自由地选择这些通知渠道的重要程度,是否响铃、是否振动、或者是否要关闭这个渠道的通知。

拥有了这些控制权之后,用户就再也不用害怕那些垃圾推送消息的打扰了,因为用户可以自主地选择自己关心哪些通知、不关心哪些通知。举个具体的例子,我希望可以即时收到支付宝的收款信息,因为我不想错过任何一笔收益,但是我又不想收到支付宝给我推荐的周围美食,因为我没钱只吃得起公司食堂。这种情况,支付宝就可以创建两种通知渠道,一个收支,一个推荐,而我作为用户对推荐类的通知不感兴趣,那么我就可以直接将推荐通知渠道关闭,这样既不影响我关心的通知,又不会让那些我不关心的通知来打扰我了。

对于每个App来说,通知渠道的划分是非常需要仔细考究的,因为通知渠道一旦创建之后就不能再修改了,因此开发者需要仔细分析自己的App一共有哪些类型的通知,然后再去创建相应的通知渠道。这里我们来参考一下微信的通知渠道划分:

在这里插入图片描述
可以看到微信划分了新消息通知和其他通知两个渠道

虽然通知渠道一旦创建之后就不能再修改了,但可以删除,这里给出删除的代码:

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.deleteNotificationChannel(channelId);

在Android 8.0和Android 8.0以下的版本中兼容使用通知

其实很简单,这里只要设置一个判断就可以了,判断当前系统是否在Android 8.0及以上,如果在Android 8.0及以上,就使用上面在Android 8.0及以上使用通知的代码,反之,则使用在Android 8.0以下的版本中使用通知的代码,代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button mBtn_Send_Notice;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn_Send_Notice = findViewById(R.id.btn_send_notification);
        mBtn_Send_Notice.setOnClickListener(this);
    }



    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_send_notification:
                // 判断当前Android版本是否在8.0及以上
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    // 此处使用Android 8.0及以上使用通知的代码
                    ... ...
                } else {
                    // 此处使用在Android 8.0以下的版本中使用通知的代码
                    ... ...
                }
                break;
            default:
        }
    }
}

这里我只给出示例的代码,上面写的非常清楚了,通知的简单使用就介绍到这里了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值