塑造该对象供给选拔 Notification.Builder,以供参考

近年来在Android中通报的选取依旧很广阔的,为了做版本包容,常用包容包NotificationCompat.Builder和
Notification.Builder。

新近日常地有人问作者这样或那样的文告什么完结,所以本文将基于个体经验对Notification做个计算,以供参考!

照会(Notification)的各个表现格局

  • NotificationCompat.Builder位于v4扩充包内(version 4 Support
    Library)
  • Notification.Builder在Android 3.0 开端引入(API level 11).

怎么着是打招呼(Notification)

照会是二个得以在应用程序平日的用户界面之外突显给用户的新闻。
布告发出时,它首先现身在状态栏的通报区域中,用户打开布告抽屉可查阅通告详情。文告区域和通报抽屉都以用户能够随时查阅的系统控区域。

作为安卓用户界面包车型地铁重中之重组成都部队分,文告有和好的统一筹划指南。在Android 5.0(API
level 21)中引入的 Material
Design

的变化是特意重庆大学的,越来越多音讯请阅读
公告设计指南

通知显示位置

  • 以图标的花样显得在通报区域中

图片 1

1.png

  • 详细消息展现在抽屉式通告栏中

图片 2

2.png

  • 以变更情势文告

图片 3

3.png

  • 在锁屏上显示文告

图片 4

4.png

不久前在Android5.0装置上发现二个难题:公告图标突然变成了黄绿的正方而不是代码中装置的icon。

怎样成立布告

随着Android系统不断提拔,Notification的开创方式也随即变动,主要变化如下:

通报显示样式

  • 规范样式

图片 5

5.png

  • 扩充样式

图片 6

6.png

  • 自定义样式

图片 7

7.png

题材由来

细读开发者文书档案其实也能够窥见部分端倪,纵然小编是直接查的源码发现的难题由来。http://developer.android.com/design/patterns/notifications.html
一文的Use distinct
icons部分介绍了几点有关文告的建议,在那之中的有两点是建议开发者不要做的行事。

Don't
Place any additional alpha (dimming or fading) into your small icons and action icons; they can have anti-aliased edges, but because Android uses these icons as masks (that is, only the alpha channel is used), the image should generally be drawn at full opacity.

Don't
Use color to distinguish your app from others. Notification icons should only be a white-on-transparent background image.

简单的说的说正是5.0后Android官方建议并非为文告的图标添加其它额外的折射率,渐变色,不要企图用颜色将通告图标与别的使用,比如系统采纳,应用的通报图标只好是在透明的背景上有草绿的图腾。
至于原因,文档并没有前述,只是提到5.0系统将会在底层处理图标,想知怎么处理的能够参考Android
SDK API level 21后的Notificaiton源码,里面写的较详细。
图片 8
图片 9

结合文书档案提供的图纸示例,应该能够掌握。
假诺不遵照提出那么有不小概率是会出上文提到难点的,为啥不是别然出问题呢?
那还借助于代码编写翻译的本子,依据尝试,近日api
21后头编写翻译会出题目,20及从前的本子编写翻译不会出难题。所以消除难题相比较简单狠毒的方案是用20及更早的本子编译代码。可是要测底消除难点,还是得遵照文书档案辅导,及从新设计布告的图标以符合供给。

Android 3.0之前

Android 3.0 (API level 11)之前,使用new Notification()措施创建文告:

NotificationManager mNotifyMgr = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(
      this, 0, new Intent(this, ResultActivity.class), 0);

Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(this, title, content, contentIntent);

mNotifyMgr.notify(NOTIFICATIONS_ID, notification);

通报的功底用法

源码分析

上边看一下到底21的Android源码里面做了怎么样操作会导致通告的图标统统变威尼斯绿。
Notification.java

private RemoteViews applyStandardTemplate(int resId, boolean hasProgress) {
    //...
    if (mLargeIcon != null) {
         contentView.setImageViewBitmap(R.id.icon, mLargeIcon);
         processLargeLegacyIcon(mLargeIcon, contentView);
         contentView.setImageViewResource(R.id.right_icon, mSmallIcon);
         contentView.setViewVisibility(R.id.right_icon, View.VISIBLE);
         processSmallRightIcon(mSmallIcon, contentView);
     } else { // small icon at left
         contentView.setImageViewResource(R.id.icon, mSmallIcon);
         contentView.setViewVisibility(R.id.icon, View.VISIBLE);
         processSmallIconAsLarge(mSmallIcon, contentView);
    }
    //...
}

        /**
         * Recolor small icons when used in the R.id.right_icon slot.
         */
        private void processSmallRightIcon(int smallIconDrawableId,
                RemoteViews contentView) {
            if (!isLegacy() || mColorUtil.isGrayscaleIcon(mContext, smallIconDrawableId)) {
                contentView.setDrawableParameters(R.id.right_icon, false, -1,
                        0xFFFFFFFF,
                        PorterDuff.Mode.SRC_ATOP, -1);

                contentView.setInt(R.id.right_icon,
                        "setBackgroundResource",
                        R.drawable.notification_icon_legacy_bg);

                contentView.setDrawableParameters(
                        R.id.right_icon,
                        true,
                        -1,
                        resolveColor(),
                        PorterDuff.Mode.SRC_ATOP,
                        -1);
            }
        }

那边本身截取了两段相比较首要的代码,在用NotificationCompat.Builder实例化咱们的布告后,最终须求将种种图标,参数配置,应用到通报视图上边。能够看到倘若我们只设置smallIcon而不安装largeIcon也是足以的,此时直接将small作为大图标设置给左侧的id为福特Explorer.id.icon的ImageView。要小心的事一般景色下都不得以不设置smallIcon,不然公告无法不奇怪展现出来。
processSmallIconAsLarge方法里面负责将大家设置的smallIcon3次拍卖,也正是此处会变动大家最终见到的公告图标,包蕴顶部状态栏和下拉显示的小图标。

Android 3.0 (API level 11)及更高版本

Android
3.0上马弃用new Notification()方式,改用Notification.Builder()来创设公告:

NotificationManager mNotifyMgr = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(
      this, 0, new Intent(this, ResultActivity.class), 0);

Notification notification = new Notification.Builder(this)
            .setSmallIcon(R.drawable.notification_icon)
            .setContentTitle("My notification")
            .setContentText("Hello World!")
            .setContentIntent(contentIntent)
            .build();// getNotification()

mNotifyMgr.notify(NOTIFICATIONS_ID, notification);

此间必要留意: “build()” 是Androdi 4.1(API level 16)参与的,用以代表
“getNotification()”。API level 16起来弃用”getNotification()”

始建通告

出殡文告须要通过 NotificationManager.notify()
来达成,该函数的三个必不可少参数是 Notification 对象,Notification
对象描述了公告的具体内容,营造该指标急需选取 Notification.Builder
类,Notification.Builder 是 Android 3.0 (API 11)
引入的,为了同盟低版本,我们一般选用 Support V4 包提供的
NotificationCompat.Builder 来创设 Notification。具体代码如下:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)

// 设置通知的基本信息:icon、标题、内容
builder.setSmallIcon(R.drawable.notification_icon)
builder.setContentTitle("My notification")
builder.setContentText("Hello World!");

// 设置通知的点击行为:这里启动一个 Activity
Intent intent = new Intent(this, ResultActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);

// 发送通知 id 需要在应用内唯一
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(id, builder.build());

参考

  1. http://developer.android.com/design/patterns/notifications.html
  2. http://developer.android.com/guide/topics/ui/notifiers/notifications.html

包容Android 3.0事先的本子

为了同盟API level 11事先的版本,v4 Support Library中提供了
NotificationCompat.Builder()其一代表格局。它与Notification.Builder()类似,二者没有太大区别。

NotificationManager mNotifyMgr = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(
      this, 0, new Intent(this, ResultActivity.class), 0);

NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.notification_icon)
            .setContentTitle("My notification")
            .setContentText("Hello World!")
            .setContentIntent(contentIntent);

mNotifyMgr.notify(NOTIFICATIONS_ID, mBuilder.build());

注:除特别表达外,本文将依照 NotificationCompat.Builder() 展开分析,
Notification.Builder()类似。

履新公告

要想翻新公告,要求选用 NotificationManager.notify() 的 id 参数,该 id
在利用内亟待唯一。要想翻新特定 id 的打招呼,只需求创立新的
Notification,并发生与此前所用 id 相同的
Notification。若是在此之前的文告依旧可知,则系统会依照新的 Notification
对象的内容更新该公告。相反,假使在此之前的打招呼已被清除,系统则会创建一个新文告。

照会中央用法

剔除通告

去除通知能够有七种办法:

  1. 通过 NotificationCompat.Builder 设置
    setAutoCancel(true),那样当用户点击文告后,布告自动删除。
  2. 通过 NotificationManager.cancel(id) 方法,删除内定 id 的通报
  3. 通过 NotificationManager.cancelAll() 方法,删除该使用的有着布告

通知的画龙点睛属性

多少个布告必须带有以下三项属性:

  • 小图标,对应 setSmallIcon()
  • 通报标题,对应 setContentTitle()
  • 详细新闻,对应 setContentText()

其它属性均为可挑选,越来越多属性方法请参考NotificationCompat.Builder

尽管别的都以可选的,但貌似都会为布告添加至少贰个动作(Action),这几个动作能够是跳转到Activity、运维2个Service或发送3个布罗兹cas等。
通过以下形式为文告添加动作:

  • 使用PendingIntent
  • 经过大视图布告的 Action Button //仅帮忙Android 4.1 (API level
    16)及更高版本,稍后会介绍

照会的进阶用法

开创布告

① 、实例化一个NotificationCompat.Builder对象

NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.notification_icon)
            .setContentTitle("My notification")
            .setContentText("Hello World!");

NotificationCompat.Builder自动设置的暗许值:

  • priority: PRIORITY_DEFAULT
  • when: System.currentTimeMillis()
  • audio stream: STREAM_DEFAULT

二 、定义并安装一个通报动作(Action)

Intent resultIntent = new Intent(this, ResultActivity.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(
            this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);

3、生成Notification对象

Notificatioin notification = mBuilder.build();

4、使用NotificationManager出殡公告

// Sets an ID for the notification
int mNotificationId = 001;

// Gets an instance of the NotificationManager service
NotificationManager mNotifyMgr = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

// Builds the notification and issues it.
mNotifyMgr.notify(mNotificationId, notification);

扭转公告

Android 5.0(API
21)引入浮动布告的变现格局,想让通报能够以转变情势显示,须求安装
Notification 的先期级为 P兰德酷路泽IOXC60ITY_HIGH 或者 PRIORITY_MAX
并且选拔铃声或振动,示例代码如下:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)

builder.setSmallIcon(R.drawable.notification_icon)
builder.setContentTitle("My notification")
builder.setContentText("Hello World!");
// 设置通知的优先级
builder.setPriority(NotificationCompat.PRIORITY_MAX);
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
// 设置通知的提示音
builder.setSound(alarmSound);

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(id, builder.build());

履新通告

履新文告相当粗略,只需再一次发送相同ID的通知即可,如若之前的布告依旧留存则会更新通告属性,要是在此之前布告不设有则再度创立。
示范代码:

NotificationManager mNotifyMgr = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Sets an ID for the notification, so it can be updated
int notifyID = 1;
NotificationCompat.Builder mNotifyBuilder = 
      new NotificationCompat.Builder(this)
          .setContentTitle("New Message")
          .setContentText("You've received new messages.")
          .setSmallIcon(R.drawable.ic_notify_status);

int numMessages = 0;
...
    mNotifyBuilder.setContentText("new content text")
            .setNumber(++numMessages);
    mNotifyMgr.notify(notifyID, mNotifyBuilder.build());
...

锁屏上海展览中心示布告

Android 5.0
文告现在还可映未来锁定显示器上。用户能够因而“设置”选择是或不是将通报显示在锁定显示屏上,并且您能够内定您使用中的通告在锁定显示屏上是否可知。通过
setVisibility() 并钦命以下值之一:

  1. VISIBILITY_PUBLIC 展现布告的完整内容。
  2. VISIBILITY_SECRET 不会在锁定显示屏上显示此文告的其它部分。
  3. VISIBILITY_PEnclaveIVATE
    突显文告图标和内容标题等主导音信,不过隐藏文告的完好内容。

设置 VISIBILITY_PCR-VIVATE
后,您还足以提供在那之中隐藏了一点详细音信的轮换版本公告内容。例如,短信
应用或然会显得一条通告,建议“您有 3
条新短信”,不过隐藏了短信内容和发件人。要提供此替换版本的公告,请先使用
NotificationCompat.Builder 创造替换布告。创造专用公告对象时,请通过
setPublicVersion() 方法为其附加替换布告。

打消布告

撤消布告有如下4种方法:

  • 点击通告栏的排除按钮,会免去全部可免去的公告
  • 设置了 setAutoCancel() 或
    FLAG_AUTO_CANCEL的公告,点击该公告时会清除它
  • 经过 NotificationManager 调用 cancel() 方法清除钦赐ID的关照
  • 经过 NotificationManager 调用 cancelAll()
    方法清除全数该使用此前发送的公告

扩充样式通告

因而 Builder.setStyle() 函数能够为通知设置增加样式,NotificationCompat
提供了两种扩张样式:BigPictureStyle, BigTextStyle, InboxStyle。

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)

builder.setSmallIcon(R.drawable.notification_icon)
builder.setContentTitle("My notification")
builder.setContentText("Hello World!");

NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.setBigContentTitle("邮件标题:");
for (int i=0; i < 5; i++) {
    inboxStyle.addLine("邮件内容" + i);
}
builder.setStyle(inBoxStyle);

通报类型

自定义通告布局样式

因此 NotificationCompat.setContent() 能够设置自定义布局,该接口的参数为
RemoteViews 类型,通过 xml 营造出须求出示的 RemoteViews 然后调用
setContent
实现安装。自定义布告布局的可用中度取决于公告视图。普通视图布局限制为 64
dp,增添视图布局限制为 256 dp。在 Android 4.1(API
16)未来,Notification 还协理大视图的打招呼,通过
Notification.bigContentView 设置相应的 RemoteViews 即可。

RemoteViews bigView;
RemoteViews smallView;

// 构建 bigView 和 smallView。
...

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

// 设置自定义 RemoteViews
builder.setContent(smallView).setSmallIcon(R.drawable.icon_notification);
Notification notification = builder.build();

// 如果系统版本 >= Android 4.1,设置大视图 RemoteViews
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
  notification.bigContentView = bigView;
}
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(DAILY_PUSH_NOTIFICATION_ID, notification);

大视图公告

照会有二种视图:普通视图和大视图。
一般说来视图:

图片 10

大视图:

图片 11

暗中认可情形下为普通视图,可经过NotificationCompat.Builder.setStyle()设置大视图。

注: 大视图(Big Views)由Android 4.1(API level
16)开头引入,且仅协助Android 4.1及更高版本。

创设大视图像和文字告

以上海教室为例:
1、构建Action Button的PendingIntent

Intent dismissIntent = new Intent(this, PingService.class);
dismissIntent.setAction(CommonConstants.ACTION_DISMISS);
PendingIntent piDismiss = PendingIntent.getService(
      this, 0, dismissIntent, 0);

Intent snoozeIntent = new Intent(this, PingService.class);
snoozeIntent.setAction(CommonConstants.ACTION_SNOOZE);
PendingIntent piSnooze = 
      PendingIntent.getService(this, 0, snoozeIntent, 0);

2、构建NotificatonCompat.Builder对象

NotificationCompat.Builder builder = 
      new NotificationCompat.Builder(this)
          .setSmallIcon(R.drawable.ic_stat_notification)
          .setContentTitle(getString(R.string.notification))
          .setContentText(getString(R.string.ping))
          .setDefaults(Notification.DEFAULT_ALL)
        // 该方法在Android 4.1之前会被忽略
          .setStyle(new NotificationCompat.BigTextStyle()
                .bigText(msg))
        //添加Action Button
        .addAction (R.drawable.ic_stat_dismiss,
                getString(R.string.dismiss), piDismiss)
        .addAction (R.drawable.ic_stat_snooze,
                getString(R.string.snooze), piSnooze);

叁 、其余步骤与日常视图相同

进程条布告

  • 肯定进程的过程条
    使用setProgress(max, progress, false)来更新速度。
    max: 最大进度值
    progress: 当前速度
    false: 是不是是不明朗的进程条

    依傍下载进程,示例如下:

    int id = 1;
    ...
    mNotifyManager = (NotificationManager) 
        getSystemService(Context.NOTIFICATION_SERVICE);
    mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setContentTitle("Picture Download")
        .setContentText("Download in progress")
        .setSmallIcon(R.drawable.ic_notification);
    
    // Start a lengthy operation in a background thread
    new Thread(
        new Runnable() {
            @Override
            public void run() {
                int incr;
                for (incr = 0; incr <= 100; incr+=5) {
                    mBuilder.setProgress(100, incr, false);
                    mNotifyManager.notify(id, mBuilder.build());
                    try {
                        // Sleep for 5 seconds
                        Thread.sleep(5*1000);
                    } catch (InterruptedException e) {
                        Log.d(TAG, "sleep failure");
                    }
                }
                mBuilder.setContentText("Download complete")//下载完成           
                        .setProgress(0,0,false);    //移除进度条
                mNotifyManager.notify(id, mBuilder.build());
            }
        }
    ).start();
    

    图片 12

上图,分别为下载过程中进度条通知 和 下载完成移除进度条后的通知。
  • 不鲜明进度的进程条
    使用setProgress(0, 0, true)来表示进程不肯定的进度条

    mBuilder.setProgress(0, 0, true); mNotifyManager.notify(id,
    mBuilder.build());

    图片 13

转移文告(Heads-up Notifications)

Android 5.0(API level
21)开始,当荧屏未上锁且亮屏时,通告可以以小窗口情势显得。用户能够在不偏离当前选拔前提下操作该公告。
如图:

图片 14

NotificationCompat.Builder mNotifyBuilder = 
    new NotificationCompat.Builder(this)
        .setContentTitle("New Message")
        .setContentText("You've received new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setFullScreenIntent(pendingIntent, false);

以下两种情况会来得浮动布告:

  • setFullScreenIntent(),如上述示范。
  • 布告全部高优先级且使用了铃声和震动

锁屏公告

Android 5.0(API level
21)开始,布告能够突显在锁屏上。用户能够经过设置选拔是还是不是同意敏感的通告内容展现在安全的锁屏上。
您的应用能够经过setVisibility()操纵布告的呈现等级:

  • VISIBILITY_PHighlanderIVATE :
    突显基本新闻,如布告的图标,但隐蔽布告的全体内容
  • VISIBILITY_PUBLIC : 显示布告的全体内容
  • VISIBILITY_SECRET : 不显得任何内容,包蕴图标

自定义文告

Android系统允许使用RemoteViews发源定义布告。
自定义普通视图像和文字告高度限制为64dp,大视图通告中度限制为256dp。同时,建议自定义布告尽量简单,以增进包容性。

自定义公告须要做如下操作:
一 、成立自定义公告布局
② 、使用RemoteViews定义布告组件,如图标、文字等
3、调用setContent()将RemoteViews对象绑定到NotificationCompat.Builder
④ 、同正规发送文告流程

只顾: 幸免为布告设置背景,因为包容性原因,有些文字大概看不清。

概念通告文件样式

照会的背景颜色在不一样的装备和版本中有所区别,Android2.3开头,系统定义了一套标准布告文件样式,建议自定义公告使用正式样式,那样有助于文告文件可知。
布告文件样式:

Android 5.0之前可用:
android:style/TextAppearance.StatusBar.EventContent.Title    // 通知标题样式  
android:style/TextAppearance.StatusBar.EventContent             // 通知内容样式  

Android 5.0及更高版本:  
android:style/TextAppearance.Material.Notification.Title         // 通知标题样式  
android:style/TextAppearance.Material.Notification                  // 通知内容样式  

更加多关照的正经样式和布局,可参看源码frameworks/base/core/res/res/layout路线下的打招呼模版如:

Android 5.0之前:  
notification_template_base.xml  
notification_template_big_base.xml  
notification_template_big_picture.xml  
notification_template_big_text.xml  

Android 5.0 及更高版本:  
notification_template_material_base.xml  
notification_template_material_big_base.xml  
notification_template_material_big_picture.xml  
notification_template_part_chronometer.xml  
notification_template_progressbar.xml  

等等。

保留Activity返回栈

常规Activity

暗许情状下,从通告运转1个Activity,按重临键会回到主显示屏。但一些时候有按再次来到键还是留在当前采取的急需,这就要选取TaskStackBuilder了。

1、在manifest中定义Activity的关系

Android 4.0.3 及更早版本
<activity
    android:name=".ResultActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity"/>
</activity>

Android 4.1 及更高版本
<activity
    android:name=".ResultActivity"
    android:parentActivityName=".MainActivity">
</activity>

② 、创设再次回到栈PendingIntent

Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// 添加返回栈
stackBuilder.addParentStack(ResultActivity.class);
// 添加Intent到栈顶
stackBuilder.addNextIntent(resultIntent);
// 创建包含返回栈的pendingIntent
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(id, builder.build());

上述操作后,从公告运转ResultActivity,按再次来到键会回到MainActivity,而不是主显示器。

特殊Activity

默许意况下,从文告运行的Activity会在近年职务列表里冒出。假诺不供给在前不久职分里展现,则要求做以下操作:

1、在manifest中定义Activity

<activity
    android:name=".ResultActivity"
    android:launchMode="singleTask"
    android:taskAffinity=""
    android:excludeFromRecents="true">
</activity>

2、构建PendingIntent

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
Intent notifyIntent = new Intent(this, ResultActivity.class);

// Sets the Activity to start in a new, empty task
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
        | Intent.FLAG_ACTIVITY_CLEAR_TASK);

PendingIntent notifyPendingIntent =
        PendingIntent.getActivity(this, 0, notifyIntent, 
        PendingIntent.FLAG_UPDATE_CURRENT);

builder.setContentIntent(notifyPendingIntent);
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(id, builder.build());

上述操作后,从公告运维ResultActivity,此Activity不会现出在目前任务列表中。

通知常见属性和常量

通报的唤醒格局

壹 、声音提示

  • 暗中认可声音
    notification.defaults |= Notification.DEFAULT_SOUND;
  • 自定义声音
    notification.sound = Uri.parse(“file:///sdcard0/notification.ogg”);

贰 、震动提醒

  • 暗许振动
    notification.defaults |= Notification.DEFAULT_VIBRATE;
  • 自定义振动
    long[] vibrate = {100, 200, 300, 400}; //震动作效果果
    // 表示在100、200、300、400这几个时刻点轮番运行和关闭震动
    notification.vibrate = vibrate;

三 、闪烁提示

  • 默许闪烁
    notification.defaults |= Notification.DEFAULT_LIGHTS;
  • 自定义闪烁
    notification.ledASportageGB = 0xff00ff00; // LED灯的颜料,绿灯
    notification.ledOnMS = 300; // LED灯显示的阿秒数,300阿秒
    notification.ledOffMS = 一千; // LED灯关闭的皮秒数,一千皮秒
    notification.flags |= Notification.FLAG_SHOW_LIGHTS; //
    必须抬高这些标志

常见的Flags

  • FLAG_AUTO_CANCEL
    当公告被用户点击之后会活动被免去(cancel)
  • FLAG_INSISTENT
    在用户响应之前会一贯重复提示音
  • FLAG_ONGOING_EVENT
    表示正在运营的风云
  • FLAG_NO_CLEAR
    公告栏点击“清除”按钮时,该文告将不会被拔除
  • FLAG_FOREGROUND_SERVICE
    表示近来服务是前台服务
    更加多Notification属性详见Notification

That’s all! 更加多关照知识点等待你来打通,欢迎补充!

参考资料
Notifications

相关文章