Android 控件 - 最简单的 Notification、Application Context 应用于 Notification

最简单的 Notification

1、演示
java 复制代码
final String CHANNEL_ID = "my_test_channel";
int notificationId = 1;

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    CharSequence name = "my test channel";
    int importance = NotificationManager.IMPORTANCE_DEFAULT;

    NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);

    notificationManager.createNotificationChannel(channel);
}

Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
        .setContentTitle("系统通知")
        .setContentText("Hello World")
        .setSmallIcon(R.drawable.ic_notification)
        .build();

notificationManager.notify(notificationId, notification);
java 复制代码
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
2、解读
java 复制代码
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
  1. 获取通知管理器
java 复制代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    ...

}
  1. 如果系统版本大于 Android 8.0(API 26),必须创建通知渠道才能发送通知
java 复制代码
CharSequence name = "my test channel";
int importance = NotificationManager.IMPORTANCE_DEFAULT;

NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
  1. 创建通知渠道,所需参数:通知渠道的唯一标识符、通知渠道的显示名称、通知渠道的重要等级
java 复制代码
notificationManager.createNotificationChannel(channel);
  1. 将通知渠道注册到系统,这个操作只需在应用首次运行时执行一次即可
java 复制代码
Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
  1. 创建通知,传入通知渠道的唯一标识符,指明该通知属于哪个通知渠道
java 复制代码
.setContentTitle("系统通知")
.setContentText("Hello World")
.setSmallIcon(R.drawable.ic_notification)
  1. 设置通知的标题,设置通知的正文内容,设置通知的图标
java 复制代码
notificationManager.notify(notificationId, notification);
  1. 发送通知,传入通知的唯一标识符

Application Context 应用于 Notification

1、演示
java 复制代码
Context context = getApplicationContext();

final String CHANNEL_ID = "my_test_channel";

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "my test channel", NotificationManager.IMPORTANCE_DEFAULT);
    notificationManager.createNotificationChannel(channel);
}

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setContentTitle("系统通知")
        .setContentText("Hello World")
        .setSmallIcon(R.drawable.ic_notification)
        .build();

notificationManager.notify(1, notification);
java 复制代码
Context context = getApplicationContext();

final String CHANNEL_ID = "my_test_channel";

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "my test channel", NotificationManager.IMPORTANCE_DEFAULT);
    notificationManager.createNotificationChannel(channel);
}

Intent intent = new Intent(context, TargetActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setContentTitle("系统通知")
        .setContentText("Hello World")
        .setSmallIcon(R.drawable.ic_notification)
        .setContentIntent(pendingIntent)
        .build();

notificationManager.notify(1, notification);
2、小结
  1. 通知系统会持有 Notification Builder 中的 Context

  2. 如果使用 Activity Context,即使 Activity 被销毁,通知系统仍会持有它的引用

  3. 通知的生命周期通常比 Activity 更长,即使应用在后台,通知也应能正常显示

  4. Application Context 能保证通知系统在整个应用生命周期内正常工作

相关推荐
乐之者v20 分钟前
AI编程 -- Agents.md 的简单示例
java·ai编程
2zcode33 分钟前
基于MATLAB深度学习的乳腺钼靶影像乳腺癌智能诊断系统设计与实现
开发语言·深度学习·matlab·乳腺癌
无风听海36 分钟前
Claude Agent Skills 的四种设计模式;从渐进式披露到最小权限
java·算法·设计模式
MoonBit月兔37 分钟前
错过大赛报名?MoonBit 开源大赛- 8 月黑客松正式开启
开发语言·ai-native·moonbit
weixin_538601971 小时前
智能体测开Day31
开发语言·python
geovindu1 小时前
java: Facade Pattern
java·开发语言·后端·外观模式·结构型模式
listening7771 小时前
HarmonyOS 6.1 元服务深度优化:从“秒开”到“常驻”的极致体验
java·开发语言·spring
布朗克1681 小时前
Go 入门到精通-29-测试与基准
开发语言·后端·golang·测试与基准
AC赳赳老秦2 小时前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例
java·大数据·python·数据挖掘·数据分析·php·openclaw
笑小枫2 小时前
用 Claude Code 推翻重写笑小枫网站
java·人工智能·spring boot·ai编程