Android Notifacation 通知栏

来源:互联网 发布:windows gollum wiki 编辑:程序博客网 时间:2024/05/08 01:44
 在android中我们可以使用到通知界面来展示我们通知给用户.我们点击通知,也可以实现跳转到我们指定的界面.当然也可以使用通知栏让我们的服务变成前台服务从而实现提高服务的优先级.

一.创建通知

              发送通知需要通过 NotificationManager.notify() 来实现,该函数的一个必要参数是 Notification 对象,Notification 对象描述了通知的具体内容,构建该对象需要利用 Notification.Builder 类,Notification.Builder 是 Android 3.0 (API 11) 引入的,为了兼容低版本,我们一般使用 Support V4 包提供的 NotificationCompat.Builder 来构建 Notification.相关代码如下.

NotificationCompat.Builder builder =newNotificationCompat.Builder(MainActivity.this);
// 设置通知的基本信息:icon、标题、内容
builder.setSmallIcon(R.drawable.biaoqin);
builder.setContentTitle("我的通知栏");
builder.setContentText("你好,通知栏");
// 设置通知的点击行为:这里启动一个 Activity
Intent intent =newIntent(MainActivity.this,ActivitySecond.class);
PendingIntent pendingIntent =PendingIntent.getActivity(MainActivity.this,0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
//自己维护通知的消失,也就是点击通知以后通知就会消失.
builder.setAutoCancel(true);
// 发送通知 id 需要在应用内唯一
NotificationManager notificationManager =(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(2, builder.build());            

二.更新通知

            然而又的时候我们需要对通知的内容进行更新,这个时候就需要利用 NotificationManager.notify() 的 id 参数,该 id 在应用内需要唯一。要想更新特定 id 的通知,只需要创建新的 Notification,并发出与之前所用 id 相同的 Notification。如果之前的通知仍然可见,则系统会根据新的 Notification 对象的内容更新该通知。相反,如果之前的通知已被清除,系统则会创建一个新通知。

三.删除通知

           删除通知可以有多种方式: 1. 通过 NotificationCompat.Builder 设置 setAutoCancel(true),这样当用户点击通知后,通知自动删除。 2. 通过 NotificationManager.cancel(id) 方法,删除指定 id 的通知 3. 通过 NotificationManager.cancelAll() 方法,删除该应用的所有通知.

四.更改自带的通知样式.

           通过 Builder.setStyle() 函数可以为通知设置扩展样式,NotificationCompat 提供了三种扩展样式:BigPictureStyle, BigTextStyle, InboxStyle

               (1)BigPictureStyle样式就是在在细节部分显示一个256dp高度的位图                       

NotificationCompat.BigPictureStyle bigPictureStyle =newNotificationCompat.BigPictureStyle();
Bitmap bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.bigpic);
bigPictureStyle.bigPicture(bitmap);
builder.setStyle(bigPictureStyle);
                                                                     
                 (2) BigTextStyle样式代码就是可以显示很多的文字信息.
NotificationCompat.BigTextStyle bigTextStyle =newNotificationCompat.BigTextStyle();
bigTextStyle.bigText("挫折和离别不过是生命中的点缀\n"+
"过了多年我才读懂了家人的眼泪\n"+
"发现原来自己没有说再见的勇气\n"+
"离别的伤感感染了满城的空气\n"+
"失去后才知道那些有多么的珍贵\n"+
"亲爱的朋友们是否已经展翅纷飞\n"+
"不飞到高处怎么开阔自己的视野\n"+
"你已经长大了 快告诉全世界\n"+
"外面的世界散发着强大的磁场\n"+
"诱惑着每一双即将展开的翅膀\n"+
"热恋的火在懵懂中凶猛地燃烧\n"+
"美丽的火花在恋人的周围环绕\n"+
"这过程很美 尽管有无奈和失落\n"+
"刻骨铭心地爱过 尽管她爱的并不是我\n"+
"如果没有离别如何学会承受打击\n"+
"如果没有跌倒如何能够学会爬起");
builder.setStyle(bigTextStyle);
                                                                          
                            (3)InBoxStyle样式代码和效果如下图所示:
 
NotificationCompat.InboxStyle inboxStyle =newNotificationCompat.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 即可。 

//加载remoteView
RemoteViews remoteViews =newRemoteViews(getPackageName(), R.layout.remotview);
//给remoteView里面的textView设置文字
remoteViews.setTextViewText(R.id.tvNO,"我的天空");
//点击的事件处理(这里需要使用到广播接收者机制)
Intent buttonIntent =newIntent("com.dapeng");
//这里加了广播,所及INTENT的必须用getBroadcast方法
PendingIntent intent_prev =PendingIntent.getBroadcast(MainActivity.this,1, buttonIntent,PendingIntent.FLAG_UPDATE_CURRENT);
//给remoteView里面的按钮设置点击的事件
remoteViews.setOnClickPendingIntent(R.id.btn, intent_prev);
//设置自定义的布局
builder.setContent(remoteViews);
<receiverandroid:name=".MyReciver">
<intent-filter>
<actionandroid:name="com.dapeng"></action>
</intent-filter>
</receiver>
publicclassMyReciverextendsBroadcastReceiver{
@Override
publicvoid onReceive(Context context,Intent intent){
Toast.makeText(context,"我接收到了广播事件",Toast.LENGTH_SHORT).show();
}
}

                                          

     六.浮动通知

            Android 5.0(API 21)引入浮动通知的展现形式,想让通知能够以浮动形式展现,需要设置 Notification 的优先级为 PRIORITY_HIGH 或者 PRIORITY_MAX 并且使用铃声或振动,示例代码如下:

NotificationCompat.Builder builder =newNotificationCompat.Builder(MainActivity.this);
builder.setSmallIcon(R.drawable.biaoqin);
builder.setContentTitle("浮动通知栏");
builder.setContentText("这里是浮动的通知栏");
builder.setPriority(NotificationCompat.PRIORITY_MAX);
Uri alarmSound =RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
// 设置通知的提示音
builder.setSound(alarmSound);
//创建通知
NotificationManager notificationManager =(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(2, builder.build());
                                                       

       七.锁屏上展示通知

             Android 5.0 通知现在还可显示在锁定屏幕上。用户可以通过“设置”选择是否将通知显示在锁定屏幕上,并且您可以指定您应用中的通知在锁定屏幕上是否可见。通过 setVisibility() 并指定以下值之一: 
1. VISIBILITY_PUBLIC 显示通知的完整内容。 2. VISIBILITY_SECRET 不会在锁定屏幕上显示此通知的任何部分。 3. VISIBILITY_PRIVATE 显示通知图标和内容标题等基本信息,但是隐藏通知的完整内容。设置 VISIBILITY_PRIVATE 后,您还可以提供其中隐藏了某些详细信息的替换版本通知内容。例如,短信 应用可能会显示一条通知,指出“您有 3 条新短信”,但是隐藏了短信内容和发件人。要提供此替换版本的通知,请先使用 NotificationCompat.Builder 创建替换通知。创建专用通知对象时,请通过 setPublicVersion() 方法为其附加替换通知。

二.notifacation的相关设置方法:

(1)方法:设置提醒标志符Flags

          功能:提醒标志符,向通知添加声音、闪灯和振动效果等设置达到通知提醒效果,可以组合多个属性

          有2种设置方法:

          <1.实例化通知栏之后通过给他添加.flags属性赋值。

[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. Notification notification = mBuilder.build();  
  2. notification.flags = Notification.Notification.FLAG_SHOW_LIGHTS ;  
          <2.通过setContentIntent(PendingIntent intent)方法中的意图设置对应的flags
[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. public PendingIntent getDefalutIntent(int flags){  
  2.     PendingIntent pendingIntent= PendingIntent.getActivity(this1new Intent(), flags);  
  3.     return pendingIntent;  
  4. }  
提醒标志符成员:

Notification.FLAG_SHOW_LIGHTS              //三色灯提醒,在使用三色灯提醒时候必须加该标志符

Notification.FLAG_ONGOING_EVENT          //发起正在运行事件(活动中)

Notification.FLAG_INSISTENT   //让声音、振动无限循环,直到用户响应 (取消或者打开)

Notification.FLAG_ONLY_ALERT_ONCE  //发起Notification后,铃声和震动均只执行一次

Notification.FLAG_AUTO_CANCEL      //用户单击通知后自动消失

Notification.FLAG_NO_CLEAR          //只有全部清除时,Notification才会清除 ,不清楚该通知(QQ的通知无法清除,就是用的这个)

Notification.FLAG_FOREGROUND_SERVICE    //表示正在运行的服务


(2)方法:.setDefaults(int defaults)     (NotificationCompat.Builder中的方法,用于提示)

      功能:向通知添加声音、闪灯和振动效果的最简单、使用默认(defaults)属性,可以组合多个属性(和方法1中提示效果一样的)

对应属性:

Notification.DEFAULT_VIBRATE    //添加默认震动提醒  需要 VIBRATE permission

Notification.DEFAULT_SOUND    // 添加默认声音提醒

Notification.DEFAULT_LIGHTS// 添加默认三色灯提醒

Notification.DEFAULT_ALL// 添加默认以上3种全部提醒


(3)方法:setVibrate(long[] pattern)


功能:设置震动方式。

使用:

[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. .setVibrate(new long[] {0,300,500,700});  
实现效果:延迟0ms,然后振动300ms,在延迟500ms,接着在振动700ms。

以上方法的还有种写法是

[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. mBuilder.build().vibrate = new long[] {0,300,500,700};  
以此类推,2种写法都可以。

如果希望设置默认振动方式,设置了方法(2)中默认为DEFAULT_VIBRATE 即可。


(4)方法:.setLights(intledARGB ,intledOnMS ,intledOffMS )


功能:android支持三色灯提醒,这个方法就是设置不同场景下的不同颜色的灯。

描述:其中ledARGB 表示灯光颜色、 ledOnMS 亮持续时间、ledOffMS 暗的时间。

注意:1)只有在设置了标志符Flags为Notification.FLAG_SHOW_LIGHTS的时候,才支持三色灯提醒。

          2)这边的颜色跟设备有关,不是所有的颜色都可以,要看具体设备。


使用:

[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. .setLights(0xff0000ff3000)  
同理,以下方法也可以设置同样效果:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. Notification notify = mBuilder.build();  
  2. notify.flags = Notification.FLAG_SHOW_LIGHTS;  
  3. notify.ledARGB = 0xff0000ff;  
  4. notify.ledOnMS = 300;  
  5. notify.ledOffMS = 300;  
如果希望使用默认的三色灯提醒,设置了方法(2)中默认为DEFAULT_LIGHTS即可。

(5)方法:.setSound(Uri sound)


功能:设置默认或则自定义的铃声,来提醒。

[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. //获取默认铃声  
  2. .setDefaults(Notification.DEFAULT_SOUND)  
  3. //获取自定义铃声  
  4. .setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))  
  5. //获取Android多媒体库内的铃声  
  6. .setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5"))  

同理相同效果的另一种设置方法这边就不讲, 和上面的都是一样的。


(6)方法:.setPriority(int pri)


功能:设置优先级

对应优先级描述如下图:

优先级用户MAX重要而紧急的通知,通知用户这个事件是时间上紧迫的或者需要立即处理的。HIGH高优先级用于重要的通信内容,例如短消息或者聊天,这些都是对用户来说比较有兴趣的。DEFAULT默认优先级用于没有特殊优先级分类的通知。LOW低优先级可以通知用户但又不是很紧急的事件。MIN用于后台消息 (例如天气或者位置信息)。最低优先级通知将只在状态栏显示图标,只有用户下拉通知抽屉才能看到内容。

对应属性(作用看上图就可知道):

Notification.PRIORITY_DEFAULT

Notification.PRIORITY_HIGH

Notification.PRIORITY_LOW

Notification.PRIORITY_MAX

Notification.PRIORITY_MIN


(7)方法:setOngoing(boolean ongoing)


功能:设置为ture,表示它为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)


(8)方法:setProgress(int max, int progress,boolean indeterminate)


属性:max:进度条最大数值  、progress:当前进度、indeterminate:表示进度是否不确定,true为不确定,如下第3幅图所示  ,false为确定下第1幅图所示

功能:设置带进度条的通知,可以在下载中使用

效果图如下:

       

注意:此方法在4.0及以后版本才有用,如果为早期版本:需要自定义通知布局,其中包含ProgressBar视图

使用:如果为确定的进度条:调用setProgress(max, progress, false)来设置通知,在更新进度的时候在此发起通知更新progress,并且在下载完成后要移除进度条,通过调用setProgress(0, 0, false)既可。

如果为不确定(持续活动)的进度条,这是在处理进度无法准确获知时显示活动正在持续,所以调用setProgress(0, 0, true) ,操作结束时,调用setProgress(0, 0, false)并更新通知以移除指示条


0 0
原创粉丝点击