
Android——通知(Notification)
版本判定:通过 渠道创建:在 Android Oreo 及以上版本中,必须先创建通知渠道,否则会抛出错误。 通知优化:通过设置不同的重要等级(如 资源管理:点击通知后设置 媒体效果:使用振动和灯光效果增强通知感知,同时设置小图标和大图标以满足不同屏幕尺寸需求。
发布日期:2021-05-25 13:00:37
浏览次数:21
分类:精选文章
本文共 3596 字,大约阅读时间需要 11 分钟。
Android 8.0(即Oreo)向上版本在通知处理上与之前版本存在明显差异,主要体现在需要使用新的 NotificationChannel 模型。此外,当应用目标版本为 Android Oreo 或更高时,发送通知前必须先检查系统版本,确保已添加相应的渠道。以下是与此相关的实现步骤和注意事项。
在 MainActivity.java
中,onClickListener
内的逻辑如下:
public class MainActivity extends AppCompatActivity { private Button GetNotification; private static final int ID = 1; private static final String CHANNEL_ID = "1"; private static final String CHANNEL_NAME = "channel1"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GetNotification = (Button) findViewById(R.id.GetNotification); GetNotification.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android 8.0 及以上版本需要创建通知渠道 NotificationChannel channel = new NotificationChannel( CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH ); manager.createNotificationChannel(channel); Intent intent = new Intent(MainActivity.this, NotificationActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0); NotificationCompat.Builder builder = new NotificationCompat.Builder( MainActivity.this, CHANNEL_ID ) .setContentTitle("Title") .setContentText("ContentText") .setWhen(System.currentTimeMillis()) .setContentIntent(pendingIntent) .setSmallIcon(R.drawable.smile) .setAutoCancel(true) .setVibrate(new long[]{0, 1000, 1000, 1000}) .setLights(Color.BLUE, 1000, 1000) .setPriority(NotificationCompat.PRIORITY_MAX) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.smile)) .build(); manager.notify(ID, builder.build()); } else { // Android 7.0 及以下版本直接发送通知 Notification notification = new NotificationCompat.Builder(MainActivity.this) .setContentTitle("Title") .setContentText("ContentText") .setWhen(System.currentTimeMillis()) .setSmallIcon(R.drawable.smile) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.smile)) .build(); manager.notify(ID, notification); } } }); }}
相应的资源布局文件 activity_main.xml
类似于:
同时,在清单文件中添加必要权限:
关键点说明:
Build.VERSION.SDK_INT
判断当前系统版本,确保在 Android Oreo 及以上时创建 NotificationChannel
,否则直接发送普通通知。setPriority
和 setImportance
)实现不同效果,以提升用户体验。setAutoCancel(true)
,确保一个通知只显示一次。通过这些实现可以在不同 Android 版本上兼容地完成通知功能,同时兼顾用户体验和系统资源管理。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年05月09日 18时21分07秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android 四大组件、五大存储、六大布局总结
2019-03-17
打工族有房有车,原来是这么实现的
2019-03-17
算法 顺序查找/折半查找/冒泡排序/选择排序(待改)
2019-03-17
Rancher从入门到精通-2.0 配置gitlab代码库 404页面 原因有点扯
2019-03-17
ProgresSql 连接 ssl off 错误
2019-03-17
浏览器打开winscp 系统错误。代码:5。 拒绝访问。
2019-03-17
Oracle Listener动态注册与静态注册(转载)
2019-03-17
Kubernetes 无法查询到并且无法删除pod实例的排查过程
2019-03-17
android中button修改不了背景颜色
2019-03-17
uniapp自定义弹窗组件|仿微信android/ios弹窗效果
2019-03-17
(网络安全)主动信息收集 操作系统识别
2019-03-17
redis教程-redis环境搭建安装(qq:1197852132)
2019-03-17
github 入门
2019-03-17
cpp
2019-03-17
学生信息管理系统之增(五):添加用户信息流程
2019-03-21
社区医疗app-Ui设计
2019-03-21
HTML 表单验证
2019-03-21