当前位置: 首页 > news >正文

Notification-状态栏上的通知

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

当程序并不是出在运行状态的时候,可以调用Notification来显示通知。

1、创建

    Notification的创建主要涉及到三个类:NotificationManager,Notification和PendingIntent

    NotificationManager主要是对通知进行管理。

    Notification类主要用于对Notification的一些属性进行定义。获得的方式主要是通过兼容各个版本的support-v4中的NotificationCompat类来获得。

    PendingIntent类可以理解成一个延迟执行的intent。

     下面是一个实例代码:

public static final int NOTIFICATIONID = 0x101;    
private NotificationManager notificationManager;
private NotificationCompat.Builder builder;
private Notification notification;
private PendingIntent pendingIntent;
notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
builder = new NotificationCompat.Builder(NotificationManiActivity.this,null);
Intent intent = new Intent(NotificationManiActivity.this,NotificationTestActivity.class);
pendingIntent = PendingIntent.getActivity(NotificationManiActivity.this,0,intent,0);
notification =builder
                .setContentTitle("通知标题")
                .setContentText("通知内容")
                .setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)//Notification什么时候显示
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                .setContentIntent(pendingIntent)
                .build();
notificationManager.notify(NOTIFICATIONID,notification);

2、取消

    取消的方式有两种,分别为:

    a、调用setAutoCancel方法,点击以后,Notification会自动消失

    b、调用notificationManager.cancel方法,根据notificationId来取消Notification

实例代码如下:

    /**
     * 取消方式一
     * 调用setAutoCancel方法,点击以后,Notification会自动消失
     * @param view
     */
    public void oneCancel(){
        notification =builder
                .setContentTitle("通知标题")
                .setContentText("通知内容")
                .setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                .setContentIntent(pendingIntent)
                .setAutoCancel(true)//点击以后,Notification会自动消失
                .build();
        notificationManager.notify(NOTIFICATIONID,notification);
    }
    /**
     * 取消方式二
     * 调用notificationManager.cancel方法,根据notificationId来取消Notification
     * @param view
     */
    public void twoCancel(){
        notificationManager.cancel(NOTIFICATIONID);//根据notificationId来取消Notification
    }

3、技巧

    3.1 Notificationt带声音

    /**
     * notificationt带声音
     * @param view
     */
    public void sound(){
        notification =builder
                .setContentTitle("notificationt带声音")
                .setContentText("notificationt带声音")
                .setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luma.ogg")))//设置Notification创建的时候的提示音
                .setContentIntent(pendingIntent)
                .build();
        notificationManager.notify(NOTIFICATIONID,notification);
    }

    3.2 Notificationt带震动

    /**
     * notificationt带震动
     * @param view
     */
    public void vibrate(View view){
        notification =builder
                .setContentTitle("notificationt带震动")
                .setContentText("notificationt带震动")
                .setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                .setContentIntent(pendingIntent)
                //设置震动的频率,小标为0的静止的时长,下标为1的表示振动的时长,小标为2的静止的时长,以此类推
                .setVibrate(new long[]{0,1000,1000,1000})
                .build();
        notificationManager.notify(NOTIFICATIONID,notification);
    }

    3.3 Notificationt带LED灯光

    /**
     * Notificationt带LED灯光
     * @param view
     */
    public void led(View view){
        notification =builder
                .setContentTitle("Notificationt带LED灯光")
                .setContentText("Notificationt带LED灯光")
                .setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                .setContentIntent(pendingIntent)
                //LED灯光颜色,LED灯光亮起时长,LED灯光暗去时长
                .setLights(Color.GREEN,1000,1000)
                .build();
        notificationManager.notify(NOTIFICATIONID,notification);
    }

    3.4 Notificationt带bigText

    /**
     * Notificationt带bigText
     * @param view
     */
    public void bigText(View view){
        notification =builder
                .setContentTitle("Notificationt带bigText")
                .setStyle(new NotificationCompat.BigTextStyle().bigText("Notificationt带bigTextNotificationt带bigTextNotificationt带" +
                        "bigTextNotificationt带bigTextNotificationt带bigTextNotificationt带"+
                        "bigTextNotificationt带bigTextNotificationt带bigTextNotificationt带bigT" +
                        "extNotificationt带bigTextNotificationt带bigTextNotificationt带bigText" +
                        "Notificationt带bigTextNotificationt带bigText"))
                .setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                .setContentIntent(pendingIntent)
                .build();
        notificationManager.notify(NOTIFICATIONID,notification);
    }

    效果图为:

bd2255852098e8406150f962bb371fb616b.jpg

注意:这个是模拟器的效果,对于部分真机,则直接不显示文字内容

    3.5 Notificationt带bigPicture

        notification =builder
                .setContentTitle("Notificationt带bigPicture")
                .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher_round)))
                .setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                .setContentIntent(pendingIntent)
                .build();
        notificationManager.notify(NOTIFICATIONID,notification);

    注意:这个对模拟器有效果,对于部分真机,则直接不显示文字内容

3.6 Notificationt带priority

    /**
     * Notificationt带priority
     * @param view
     */
    public void priority(View view){
        notification =builder
                .setContentTitle("Notificationt带priority")
                .setContentText("Notificationt带priority")
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                .setContentIntent(pendingIntent)
                .build();
        notificationManager.notify(NOTIFICATIONID,notification);
    }

    优先级的参数从低到高分别为:PRIORITY_DEFAULT表示默认的重要程度,和不设置效果是一样的。PRIORITY_MIN表示最低的重要程度,系统只会在特定的场景中才会显示这条通知,比如用户下拉状态栏的时候;PRIORITY_LOW表示较低的重要程度,系统可能会将这类通知缩小,或者是改变其显示的顺序(有一部分手机会修改显示顺序),并将其排在更重要的通知之后;PRIORITY_HIGH表示较重的重要程度,系统可能会将这类通知放大,或者是改变其显示顺序,排在比较靠前的位置;PRIORITY_MAX表示最重要的通知,有一些手机上面会直接显示成一个弹窗的形式,有一些还是改变显示顺序。

4、自定义部分

      参考地址:https://developer.android.com/training/notify-user/custom-notification#java

转载于:https://my.oschina.net/u/2253892/blog/2247238

相关文章:

  • Linux、Windows如何进行性能监控与调优
  • SpringCloud集成分布式事务LCN (一)
  • 实验报告四 恶意代码技术
  • 转载的项目
  • OpenCASCADE Face Normals
  • PgAUT插件的原理
  • beetl的内置函数 (如strutil 工具类)
  • JDK命令行(jps、jstat、jinfo、jmap、jhat、jstack、jstatd、hprof)与JConsole
  • Aliyun ECS 重置系统
  • Composite组合模式(结构型模式)
  • SQL基础知识
  • 开放源代码库指南
  • WPF换肤之三:WPF中的WndProc
  • 【转】VUE 爬坑之旅-- 如何对公共JS,CSS进行统一管理,全局调用
  • 各个浏览器之间常见的兼容性问题
  • jquery ajax学习笔记
  • js算法-归并排序(merge_sort)
  • JS专题之继承
  • mac修复ab及siege安装
  • markdown编辑器简评
  • PHP变量
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SpriteKit 技巧之添加背景图片
  • V4L2视频输入框架概述
  • vue:响应原理
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 码农张的Bug人生 - 初来乍到
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 使用common-codec进行md5加密
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 智能合约开发环境搭建及Hello World合约
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​【已解决】npm install​卡主不动的情况
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (AngularJS)Angular 控制器之间通信初探
  • (day6) 319. 灯泡开关
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (五)c52学习之旅-静态数码管
  • ***通过什么方式***网吧
  • .gitignore文件设置了忽略但不生效
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET/C# 使窗口永不获得焦点
  • .net访问oracle数据库性能问题
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • /bin/rm: 参数列表过长"的解决办法
  • @SentinelResource详解