• 实现通知步骤 
    一般实现通知需要如下步骤: 
    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 : 不显示任何内容,包括图标。

Android Notification 的四种使用方式的更多相关文章

  1. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

    Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览   作为一个完成的应用程序,数据存储操作是必不可少的. ...

  2. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  3. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  4. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite

    SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...

  5. [Android]Android数据的四种存储方式

    存储方式 Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/d ...

  6. (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  7. [转][Android]Android数据的四种存储方式

    android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuil ...

  8. Android数据的四种存储方式

    作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File. ...

  9. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File

    作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别 是:SharePreference.SQLite.Content Provider和File ...

随机推荐

  1. NIOS II下基于中断的UART接收和发送设计示例代码

    #include "sys/alt_stdio.h" #include "altera_avalon_uart_regs.h" #include "s ...

  2. UT源码162

    (3)设计佣金问题的程序 commission方法是用来计算销售佣金的需求,手机配件的销售商,手机配件有耳机(headphone).手机壳(Mobile phone shell).手机贴膜(Cellp ...

  3. JavaScript - this详解 (二)

    用栗子说this Bug年年有,今年特别多 对于JavaScript这么灵活的语言来说,少了this怎么活! function 函数 this 对于没有实例化的function,我们称之为函数,即没有 ...

  4. XE10开发的APP对于苹果IPV6上架要求的处理(DelphiTeacher)

    1.服务器必须使用域名.不能使用IP地址2.Indy的话,域名加[]3.DataSnap的话,Params.Values['CommunicationIPVersion'] :='IP_IPv6';4 ...

  5. sql字段操作

    --删除第一位 substring(ftpMobile,2,len(ftpMobile)-1) --检查是否是数字 ISNUMERIC(ftpMobile) =0  含数字以外字符 ISNUMERIC ...

  6. C# 设置textedit只能输入英文数字下划线,并且只能以英文开头(正则表达式)

    this.textEdit1.Properties.Mask.EditMask = @"[a-zA-z][a-zA-Z0-9_]*";

  7. WordCloud 简介

    WordCloud 简介 GitHub GitHub:https://github.com/amueller/word_cloud example:https://github.com/amuelle ...

  8. 【海量干货】89页PPT详解微信O2O行业解决方案

    根据腾讯大讲堂提供的信息,整理成了PPT,下载地址: http://yunpan.cn/cZAbTnJXnMymd  访问密码 f36d

  9. Windows上编译OpenShadingLanguage

    将OSL 1.3.0解压到[工作目录]/osl/OpenShadingLanguage 对Debug使用如下bat生成项目文件: @Echo off cd OpenShadingLanguage se ...

  10. pageadmin自助建站 网站目录权限的设置方法

    在用pageadmin网页设计的时候遇到各种问题可以参考官网教程网站目录权限的设置方法 网站目录必须设置读取和写入权限,否则后台解压,删除文件,在线上传等功能都无法正常使用,下面讲解本机和服务器配置目 ...