博客
关于我
Android Notification 食用指北
阅读量:793 次
发布时间:2019-03-25

本文共 2729 字,大约阅读时间需要 9 分钟。

Notification 的基本使用与扩展功能

Notification 的创建与使用

在 Android 开发中,Notification 是一种强大的 UI 组件,能够将应用的状态信息反馈给用户。通过发送 Notification,可以在系统的通知栏中显示图标提示,用户可以通过拉下来信息查看详情。

创建基本 Notification

要创建一个基本的 Notification,主要需要设置以下属性:

  • 小图标:通过 setSmallIcon() 方法设置。
  • 标题:通过 setContentTitle() 方法设置。
  • 内容:通过 setContentText() 方法设置。
    宏观来看,这三个属性是核心配置,缺一不可。
  • 此外,为了让 Notification 与用户交互,可以通过设置 Action 来实现跳转指定页面、启动服务或发送广播。可以通过 setContentIntent() 方法设置 Pending Intent,用来指定点击后要执行的操作。

    此外,Notification 对象可以通过 setDefaults() 方法设置一些默认属性,如震动、响铃等效果。但需要注意,一旦设置默认属性,自定义效果将失效。

    Notification 的扩展功能

    设置大图标

    Notification 中,大图标可以通过 setLargeIcon() 方法设置。如果同时设置小图标和大图标,小图标会显示在右侧,largeIcon 则会放在左侧。

    以下是代码示例:

    Resources res = getResources();NotificationCompat.Builder builder = new NotificationCompat.Builder(this)    .setSmallIcon(R.drawable.small_icon)    .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable_large_icon))    .setContentTitle("标题")    .setContentText("内容");Notification notification = builder.build();mNotificationManager.notify(TAG, 0, notification);

    与用户交互

    为了使 Notification具备交互能力,需要设置相应的 Pending Intent。例如,要启动 MainActivity,可以这样做:

    PendingIntent mainPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class),     PendingIntent.FLAG_UPDATE_CURRENT);Notification notification = ...    .setContentIntent(mainPendingIntent);

    clicking the notification 将会以 mainPendingIntent 为目标执行。

    一些特殊效果

    如果需要让 Notification 有一些特殊效果,可以设置以下 Flags:

    • FLAG_NO_CLEAR:设置后,该 Notification 无法被系统清除。
    • FLAG_AUTO_CANCEL:设置后,用户点击通知后通知会自动消失。
    • FLAG_ONGOING_EVENT:表示该通知与当前正在运行的 Foreground Service 有关,无法手动清除。
    • FLAG_FOREGROUND_SERVICE:如果您的应用正在以 Foreground Service 的形式运行,设置上述 Flag,可以更好地与用户交互。

    此外,想让 Notification 有震动或响铃效果,可以通过 setVibrate()setDefaultSound() 等方法设置。

    严重的是,设置默认效果时(如 Notification.DEFAULT_VIBRATENotification.DEFAULT_SOUND),自定义设置将失效。

    进度条 Notification

    如果需要在 Notification 中显示进度条,可以这样做:

    private void showProgressBarNotification() {    count++;    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)        .setSmallIcon(R.mipmap.ic_launcher)        .setContentTitle("带进度条的通知")        .setContentText("进度: " + count + "/" + 100)        .setProgress(100, count, false);    mNotification = builder.build();    mNotificationManager.notify(TAG, 0, mNotification);}

    与此同时,可以使用 Handler 定时更新进度条:

    final Runnable updateProgress = new Runnable() {    @Override    public void run() {        showProgressBarNotification();        if (count < 100) {            postDelayed(updateProgress, 200);        }    }};

    最终,可以通过点击动画效果取自应用自身资源。

    此外,需要注意的是,通知栏的清除按钮可以清除任何可清除 notifications。如果要自定义清除行为,可以设置 setAutoCancel(true),然后单击通知即可清除。

    总结

    通过以上方法,可以非常方便地创建和定制 Notification。无论是单纯的信息通知,还是带有进度条/图片或与用户交互的通知,都可以通过 NotificationCompat.Builder readily配置。当然,在实际开发中,还需要考虑权限申请(如震动权限)以及兼容不同的安卓版本的问题。

    转载地址:http://zgauk.baihongyu.com/

    你可能感兴趣的文章
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>