Android Notifacation 通知栏
来源:互联网 发布:windows gollum wiki 编辑:程序博客网 时间:2024/05/08 01:44
一.创建通知
发送通知需要通过 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);
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);
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属性赋值。
- Notification notification = mBuilder.build();
- notification.flags = Notification.Notification.FLAG_SHOW_LIGHTS ;
- public PendingIntent getDefalutIntent(int flags){
- PendingIntent pendingIntent= PendingIntent.getActivity(this, 1, new Intent(), flags);
- return pendingIntent;
- }
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 permissionNotification.DEFAULT_SOUND // 添加默认声音提醒
Notification.DEFAULT_LIGHTS// 添加默认三色灯提醒Notification.DEFAULT_ALL// 添加默认以上3种全部提醒
(3)方法:setVibrate(long[] pattern)
功能:设置震动方式。
使用:
- .setVibrate(new long[] {0,300,500,700});
以上方法的还有种写法是
- mBuilder.build().vibrate = new long[] {0,300,500,700};
如果希望设置默认振动方式,设置了方法(2)中默认为DEFAULT_VIBRATE 即可。
(4)方法:.setLights(intledARGB ,intledOnMS ,intledOffMS )
功能:android支持三色灯提醒,这个方法就是设置不同场景下的不同颜色的灯。
描述:其中ledARGB 表示灯光颜色、 ledOnMS 亮持续时间、ledOffMS 暗的时间。
注意:1)只有在设置了标志符Flags为Notification.FLAG_SHOW_LIGHTS的时候,才支持三色灯提醒。
2)这边的颜色跟设备有关,不是所有的颜色都可以,要看具体设备。
使用:
- .setLights(0xff0000ff, 300, 0)
- Notification notify = mBuilder.build();
- notify.flags = Notification.FLAG_SHOW_LIGHTS;
- notify.ledARGB = 0xff0000ff;
- notify.ledOnMS = 300;
- notify.ledOffMS = 300;
(5)方法:.setSound(Uri sound)
功能:设置默认或则自定义的铃声,来提醒。
- //获取默认铃声
- .setDefaults(Notification.DEFAULT_SOUND)
- //获取自定义铃声
- .setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))
- //获取Android多媒体库内的铃声
- .setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5"))
同理相同效果的另一种设置方法这边就不讲, 和上面的都是一样的。
(6)方法:.setPriority(int pri)
功能:设置优先级
对应优先级描述如下图:
对应属性(作用看上图就可知道):
Notification.PRIORITY_DEFAULT
Notification.PRIORITY_HIGH
Notification.PRIORITY_LOWNotification.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)
并更新通知以移除指示条
- Android Notifacation 通知栏
- push-notifacation推送通知
- Android Notifacation设置图标无效
- Android通知栏通知
- android 使用Notifacation,Service实现对项目的下载更新
- android 模仿自带的notifacation提示左右滑动删除Listveiw的item项
- android通知栏进度条
- android 通知栏处理
- android 打开通知栏
- Android 通知栏 Notification
- android显示通知栏
- android通知栏提示
- android通知栏提示
- android通知栏提示
- android通知栏广告
- android NotificationManager 通知栏
- Android 通知栏消息
- Android 通知栏消息
- ffmpeg命令详细说明
- hey 这是我的第一篇博客
- retrofit日志拦截器
- 部署java程序出现 java.lang.OutOfMemoryError: PermGen space错误
- Android开源框架universal-Image-Loader介绍
- Android Notifacation 通知栏
- 轮播条广告位
- Windows socket编程
- android65k问题官方解决方法
- [Matlab] mex混编OpenCV
- WebView加载网页失败以后
- Android —— ViewStub(惰性装载控件)的应用
- Android全局弹框
- Gradle相关设置