# Android11-通知的使用

1.使用通知

1.1 创建一个通知

  • 第一步:获得NotificationManager对象来对通知进行管理。

    可以调用Context的getSystemService()方法获取。该方法接收一个字符串参数,用于确定获取哪个系统服务,获取通知传入Context.NOTIFICATION_SERVICE

    • 代码如下:
     //创建一个NotificationManager对象
     NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
  • 第二步:创建一个Notification对象

使用一个Builder构造器来创建一个Notification对象。

//创建Notification
 Notification notification = new NotificationCompat.Builder(MainActivity.this)
         .setContentTitle("这是通知内容标题")
         .setContentText("正式通知内容")
         .setWhen(System.currentTimeMillis())
         .setSmallIcon(R.mipmap.ic_launcher)
         .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
         .build();
  • 第三步:显示通知

    调用NotificationManager的notify()方法可以让通知显示出来,该方法接收两个参数,第一个是id,保证每个通知指定的id都是不同的,第二个是要显示的Notification对象

manager.notify(1, notification);
  • 完整代码如下
sendNotice = (Button) findViewById(R.id.send_notification);
       sendNotice.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               //获得NotificationManager对象
               NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
               //创建Notification
               Notification notification = new NotificationCompat.Builder(MainActivity.this)
                       .setContentTitle("这是通知内容标题")
                       .setContentText("正式通知内容")
                       .setWhen(System.currentTimeMillis())
                       .setSmallIcon(R.mipmap.ic_launcher)
                       .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                       .build();
               //发送通知
               manager.notify(1, notification);
           }
       });

1.2实现通知的点击功能

使用PendingIntent可以实现这一功能。PendingIntent和Intent类似,但是PendingIntent更加倾向于在某个合适的时机去执行某个某个动作,而Intent更加倾向于立即执行某个动作。

1.2.1PendingIntent的用法

  • PendingIntent提供了几个静态方法用于获取PendingIntent的实例:getActivity()getBroadcast()getService()
  • 这几个静态方法接受的参数都是相同的:
- 第一个是Context

- 第二个一般用不到,通常传0即可。

- 第三个是一个Intent对象

- 第四个是用于确定PendingIntent的行为 
  • 完整代码如下
//初始化Intent
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
//使用Intent获得PendingIntent对象
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(MainActivity.this)
   .setContentTitle("这是通知内容标题")
   .setContentText("正式通知内容")
   .setWhen(System.currentTimeMillis())
   .setSmallIcon(R.mipmap.ic_launcher)
   .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
   //设置PendingIntent
   .setContentIntent(pi)
   .build();
//显示通知
manager.notify(1,notification);
}

1.3实现点击通知之后删除通知的功能
实现这个功能有两种方法,

  • 第一种是在实例化notification时setAutoCancel传入true。
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
.build();
  • 第二种是显示的调用NotificationManager的cancel()方法将它取消,这个方法接收通知的id用于指定取消哪个通知
//获得NotificationManager对象
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//取消id为1的通知
manager.cancel(1);

2.通知的高级功能

2.1通知发出时播放音频
使用setSound()方法,接收一个Uri参数,指定通知发出时要播放的音频

Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
//播放音频
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
.build();

2.2通知发出时手机振动

使用setVibrate()方法,接收一个virbrate参数,它是一个长整型数组,用于设置手机静止和振动的时长。下标为0的值表示手机静止的时长,下标为1的值表示手机振动时长,下标为2的值表示手机静止的时长。

Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
//播放音频
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
//设置手机接收到通知时立刻振动1秒,静止1秒,再振动一秒
.setVibrate(new long[] {0, 1000, 1000, 1000})
.build();

注意:使用手机的震动功能还需在AndroidManifest.xml文件中添加权限声明

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.anwser_mac.notificationtest">
    //声明权限
    <uses-permission android:name="android.permission.VIBRATE"/>

2.3 实现通知未读时LED灯闪烁

Notification notification = new NotificationCompat.Builder(MainActivity.this)
    .setContentTitle("这是通知内容标题")
    .setContentText("正式通知内容")
    .setWhen(System.currentTimeMillis())
    .setSmallIcon(R.mipmap.ic_launcher)
    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
    //设置PendingIntent
    .setContentIntent(pi)
    //设置点击通知时删除通知
    .setAutoCancel(true)
    //播放音频
    .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
    //设置手机接收到通知时立刻振动1秒,静止1秒,再振动一秒
    .setVibrate(new long[] {0, 1000, 1000, 1000})
    //设置LED灯,绿色闪烁
    .setLights(Color.GREEN, 1000, 1000)
    .build();
  • 注:如果不想进行这么繁杂设置,可以直接使用通知的默认效果,它会根据手机环境来决定播放什么铃声,及如何振动等

    Notification notification = new NotificationCompat.Builder(this)
    .setDefaults(NotificationCompat.DEFAULT_ALL)
    .build();
    

2.4设置通知显示长文本内容,超出范围自动换行
在setStyle方法中创建一个NotificationCompat.BigTextStyle对象,然后调用该对象的bigText方法

    .setStyle(new NotificationCompat.BigTextStyle().bigText("hhhhhhhhhhhhhhhhhhhhhhhhhhhhzheshi 一段很长长的文本"))

2.5设置通知显示一张大图

具体用法跟2.4类似,但是这次创建的是一个NotificationCompat.BitPictureStyle对象。

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round)))

2.6设置通知的重要程度
调用setPriority()方法来设置通知的重要程度,分为5歌级别

  1. PRIORITY_DEFAULT : 表示默认程度,和不设置的效果一样。
  2. PRIORITY_MIN :最低的重要程度,系统可能只会在特定的场景才会显示这条通知,比如用户下拉状态栏的时候。
  3. PRIORITY_LOW : 较低的重要程度,系统可能会降这类通知缩小,或改变其显示的顺序
  4. PRIORITY_HIGHT : 较高的重要程度,系统可能会将这类通知放大,或改变其显示的顺序,将其排在比较靠前的位置。
  5. PRIORITY_MAX : 最高的重要程度,这类通知消息必须要让用户立即看到,甚至需要用户做出相应操作。
  • 具体写法如下:
setPriority(NotificationCompat.PRIORITY_MAX)
2017-04-13_11-58-07.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容