Android开发之Notification

本文介绍如何在Android应用中创建和管理通知,包括使用NotificationManager创建通知渠道,利用Builder构造器定制Notification对象,并演示如何发送及取消通知。文章还强调了在不同Android版本上确保兼容性的方法。

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

创建一个NotificationManager

NotificationManager类是一个通知管理器类,这个对象是由系统维护的服务,是以单例模式的方式获得,所以一般并不直接实例化这个对象。在Activity中,可以使用Activity.getSystemService(String)方法获得NotificationManager对象。Activity.getSystemService(String)方法可以通过Android系统级服务的句柄,返回对应的对象。在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION_SERVICE即可。

使用Builder构造器来创建Notification对象

使用NotificationCompat类的Builder构造器来创建Notification对象,可以保证程序在所有的版本上都能正常工作。Android8.0新增了通知渠道,如果没有设置,则通知无法在Android8.0的机器上显示。

NotificationChannel

通知渠道,Android8.0引入了通知渠道,其允许您为要显示的每种通知类型创建用户自定义的渠道。

通知重要程度设置,NotificationManager类中
通知设置开关通知是否弹出是否发出提示音状态栏中是否显示
IMPORTANCE_NONE
IMPORTANCE_MIN
IMPORTANCE_LOW
IMPORTANCE_DEFAULT
IMPORTANCE_HIGH

常见方法说明

  1. setContentTitle(String string) 设置标题

  2. setContentText(String string) 设置文本内容

  3. setSmallIcon(int icon)设置小图标

  4. setLargeIcon(Bitmap icon)设置通知的大图标

  5. setColor(int argb)设置小图标的颜色

  6. setContentIntent(PendingIntent intent)设置点击通知后的跳转意图

  7. setAutoCancel(boolean boolean)设置点击通知后自动清楚

  8. setWhen(long when)设置通知被创建的时间

    前三个必须设置,后面的根据需求

注意点

Android从5.0系统开始,对于通知栏图标的设计进行了修改,现在Google要求,所有应用程序的通知栏图标,应该只使用alpha图层来进行绘制,而不应该包括RGB图层。(不带颜色的图片)

下面进行相关Notification练习

package com.njyd.mynotification;

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

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    private NotificationManager manager;
    private Notification notification;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ){//判断是否为8.0版本以上
            NotificationChannel channel = new NotificationChannel("leo", "测试通知",
                    NotificationManager.IMPORTANCE_HIGH);//创建通知渠道,设置渠道id,通知名称,通知重要性
            manager.createNotificationChannel(channel);
        }

        Intent intent = new Intent(this, NotificationActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        notification = new NotificationCompat.Builder(this,"leo")
                .setContentTitle("官方通知")
                .setContentText("今天不学习,明天变辣鸡")
                .setSmallIcon(R.drawable.main_user)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.top_btn))//将图片转换成Bitmap
                .setColor(Color.parseColor("#ff0000"))
                .setContentIntent(pendingIntent)
                .setAutoCancel(true)
                .build();
    }
    public void sendNotification(View view){
        manager.notify(1,notification);

    }
    public void cancelNotification(View view){
        manager.cancel(1);
    }
}

package com.njyd.mynotification;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import androidx.annotation.Nullable;

public class NotificationActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("leo","onCreate:进入NotificationActivity");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值