• 实现通知步骤 
    一般实现通知需要如下步骤: 
    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. java.lang.ClassNotFoundException: org.springframework.orm.hibernate3.LocalSessionFactoryBean

    Caused by: java.lang.ClassNotFoundException: org.springframework.orm.hibernate3.LocalSessionFactoryB ...

  2. solr&lucene3.6.0源码解析(二)

    上文描述了solr3.6.0怎么采用maven管理的方式在eclipse中搭建开发环境,在solr中,为了提高搜索性能,采用了缓存机制,这里描述的是LRU缓存,这里用到了 LinkedHashMap类 ...

  3. redis整理の配置

    redis有一个很强大也很重要的配置文件redis.conf.此文件可以随服务启动,为服务配置各种不同场景所需的参数: daemonize: 默认情况下,redis 不是在后台运行的,如果需要在后台运 ...

  4. DATATable转为json

    public static string DataTableToJson(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder() ...

  5. C# 连接 IBM MQ

    安装 IBM WebSphere MQ:http://www-01.ibm.com/software/integration/wmq/explorer/downloads/ 正确安装要注意几个地方,集 ...

  6. WPF成长之路------帧动画(1)

    最近公司的一个项目因为是WPF的,而自己已经很长一段时间没有接触过WPF了,再加上之前没有做过wpf的动画效果,因此在学习的过程中也顺便记录一下,说不定以后还会用上,同时也算是总结一下吧!刚开始写博客 ...

  7. CryptoJS导入sha加密包出现错误

    Uncaught TypeError: Cannot read property 'extend' of undefined at sha224.js:12 at sha224.js:60 Uncau ...

  8. 2019 JUST Programming Contest J. Grid Beauty

    J. Grid Beauty time limit per test 3.0 s memory limit per test 256 MB input standard input output st ...

  9. scrapy框架基于CrawlSpider的全站数据爬取

    引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...

  10. git 克隆 提交本地修改到远程方法

    最近一个项目,提交总报错 按照下面的流程就ok了 $ git clone $ git init $ cd shop $ git branch -al //查看所有分支 $ git pull origi ...