zoukankan      html  css  js  c++  java
  • Android Notification 的四种使用方式

    • 实现通知步骤 
      一般实现通知需要如下步骤: 
      1.获取 NotificationManager 实例管理通知; 
      2.实例 Notification 对象; 
      3.管理事件 Intent; 
      4.发送通知。 
      注:如不需在通知出现时,点击时有事件执行,步骤3可以忽略。

    • 1. 普通通知 
      获取 NotificationManager 实例: 
      NotificationManager 对通知进行管理,调用 Context 的 getSystemService() 方法获取。

    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    • 1

    实例 Notification 对象:

    Notification notification= new NotificationCompat.Builder(Context).build();
    • 1

    此时只创建了一个空的 Notification 对象,没有实际作用,可以在build() 方法之前连缀任意多的方法设置 Notification 对象。现在来设置一些基本设置

    Notification notification = new NotificationCompat.Builder(Context)
                .setContentText("通知内容")
                .setContentTitle("通知标题")
                .setSmallIcon(android.R.mipmap.ic_launcher_round)
              .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_round))
                .setWhen(System.currentTimeMillis())
                .build();
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    以上设置了五个方法: 
    setSmallIcon() 用于设置通知的小图标,只能使用纯 alpha 图层的图片进行设置,小图标会显示在系统状态栏上。(alpha 图层的图片你不知道没关系,UI 会知道的,哈哈,这个我也不知P出来,这里我只是暂时用默认图标代替) 
    setLargeIcon() 设置通知的大图标,当下拉通知后显示的图标。 
    setWhen() 指定通知被创建的时间,以毫秒为单位,下拉通知后会将时间显示在相应的通知上。

    现在可以发送一个基本通知了

    manager.notify(1,notification);
    • 1

    notify() 方法接收两个参数,参数一 id 指定通知的 id,要保证每个通知的 id 是不同的;参数二 Notification 对象,传入之前创建好的即可。 
    当次通知出现时,点击是不会有任何效果的,这是因为没有关联 Intent,没有还不简单,给他添加一个就可以了,此时会用到 PendingIntent ,PendingIntent 的获取可以根据需求选择 
    getActivity(),getBroadcast(),getService() 等静态方法来获取。

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.baidu.com"));
        PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
        Notification notification = new NotificationCompat.Builder(Content)
                .setContentIntent(pi)
                .build();
    • 1
    • 2
    • 3
    • 4
    • 5

    调用 setContentIntent() 方法,传入 PendingIntent 实例即可,当点击同时会打开浏览器进入百度主页。 
    我们现在在完善下 Notification

        Notification notification = new NotificationCompat.Builder(Context)
                ...
                .setAutoCancel(true)//点击通知头自动取消
                .setDefaults(NotificationCompat.DEFAULT_ALL)//设置铃声及震动效果等
                .build();
    • 1
    • 2
    • 3
    • 4
    • 5

    控制手机震动等还需要相应的权限

        <uses-permission android:name="android.permission.VIBRATE"/>
    • 1

    也可对铃声,LED灯,震动等分别进行设置

    setSound()//铃声
    setLights()//LED灯
    setVibrate()//震动
    • 1
    • 2
    • 3
    • 2.悬挂式通知
    //在 build()之前设置 .setFullScreenIntent()
       Notification builder = new NotificationCompat.Builder(Context);
        Notification notify = builder.setSmallIcon(R.mipmap.ic_launcher_round)
                .setPriority(Notification.PRIORITY_DEFAULT)  //通知的优先级
                .setCategory(Notification.CATEGORY_MESSAGE)  //通知的类型
                .setContentTitle("通知")
                .setAutoCancel(true)
                .setContentIntent(pi)
                .setContentText("Heads - Up Notification on Android 5.0")
                .setFullScreenIntent(pi, true)  //不设置此项不会悬挂,false 不会出现悬挂
                .build();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    setPriority() 方法共有5个等级: 
    1. PRIORITY_MIN - 最低级别(-2); 
    2. PRIORITY_LOW - 较低级别(-1); 
    3. PRIORITY_DEFAULT - 默认级别(0); 
    4. PRIORITY_HIGH - 较高级别(1); 
    5. PRIORITY_MAX - 最高级别(2); 
    当发出此类型的通知时,通知会以悬挂的方法显示在屏幕上。

    • 3.折叠式通知

    折叠式同时需要借助 RemoteViews 来实现

    Notification builder = new NotificationCompat.Builder(Context);
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.sina.com"));
    
        PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
    
        // 未下拉的样式 R.layout.collapsed
        RemoteViews collapsed = new RemoteViews(getPackageName(), R.layout.collapsed);
        collapsed.setTextViewText(R.id.collapsed_text, "关闭状态");
    
        //下拉后的样式R.layout.show
        RemoteViews show = new RemoteViews(getPackageName(), R.layout.show);
    
    
        Notification notify = builder.setAutoCancel(true)
                .setSmallIcon(R.mipmap.ic_launcher_round)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                .setContentIntent(pi)
                .setContentText("新浪微博")
                .setCustomContentView(collapsed)//下拉前
                .setCustomBigContentView(show)//下拉后
                .build();
    
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.notify(0, notify);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 4.锁屏通知 
      Android 5.0(API level 21)开始,通知可以显示在锁屏上,通过设置选择是否允许敏感的通知内容显示在安全的锁屏上。
    //通过 setVisibility() 方法设置即可
    ...
    .setVisibility(VISIBILITY_PUBLIC)
    .build();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    setVisibility() 方法共有三个选值: 
    1.VISIBILITY_PRIVATE : 显示基本信息,如通知的图标,但隐藏通知的全部内容; 
    2.VISIBILITY_PUBLIC : 显示通知的全部内容; 
    3.VISIBILITY_SECRET : 不显示任何内容,包括图标。

  • 相关阅读:
    *args和**kwargs
    事件驱动模型
    同步异步和阻塞非阻塞
    多进程和多线程
    认识tornado(五)
    认识tornado(四)
    认识tornado(三)
    [GO]使用select实现超时
    [GO]使用select实现斐波那契
    [GO]ticker的使用
  • 原文地址:https://www.cnblogs.com/changyiqiang/p/9075583.html
Copyright © 2011-2022 走看看