美高梅网上注册平台你看到的消息提示框就是通
分类:美高梅网上注册平台

通知(Notification)这个功能对于我们来说非常的常见。打开手机的时候,各种软件的推送消息蜂拥而至,然后我们的通知栏被挤得满满的。你看到的消息提示框就是通知。

不怕跌倒,所以飞翔

通知--一般当我在手记下拉的时候会发现一排信息提示(天气情况,qq消息,UC推荐,58推荐等等),这些就是通知。

从JellyBean 以来,通知系统做了一次被引入Android 以来最重大的结构性和功能性的变动。

参考文献:
ASleepyCoder的Android Notification常见样式总结文章
vipra的Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)


  • 通知可以包含操作,用户可以在通知抽屉中直接做出回应
  • 通知在大小和布局方面更加灵活,可以展开显示更多的信息
  • 通知有了优先级高低的排列方式,而不仅仅是时间的排列

本文主要知识点概要:

  • 通知(Notification)的简单使用
  • 通知(Notification)的一些常用的设置方法
  • 通知(Notification)的进阶使用
  • 通知(Notification)的常见问题

通知分为三种:普通广播  自定义广播   大视图广播。

1.显示接收短消息以及即时信息等(短信 ,QQ,微信等)2.显示客户端的推送消息 3.显示正在进行的事务 (播放器的显示,版本更新等)

1. 简单使用

  • 创建一个NotificationManager对通知进行管理
  • 通过一个构建器来创建一个Notification对象

普通广播的创建:

通知的基本用法还是很灵活的,可以在活动中创建,也可以在广播接收器中创建,还可以在服务中创建。一般在广播和服务中用的比较多,因为只有在程序进入后台的时候,我们才需要使用通知,活动中使用的比较少。

1.1创建一个NotificationManager对象

NotificationManager mManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

通过NotificationManager来管理通知内容;

通知的内容和属性:NotificationCompat内部的builder类进行通知的内容进行设置,各种set方法;

通知的基本布局包括:

1.2创建一个Notification对象

这个对象是通过构建者模式创建的,这里先贴代码,之后我在详细讲解常用的方法:

        NotificationCompat.Builder nb = new NotificationCompat.Builder(this, "1");
        nb.setContentTitle("通知的标题栏");
        nb.setContentText("通知栏内容");
        nb.setWhen(System.currentTimeMillis());
        nb.setSmallIcon(R.drawable.ic_stat_name);
        nb.setTicker("状态栏中提示的内容");
        nb.setDefaults(Notification.DEFAULT_VIBRATE);
        Notification notification = nb.build();

        mManager.notify(1,notification);

通过以上方法就可以成功的创建一个通知了,这里面具体的设置方法我在后面会详细讲解。

通知的属性:通过Notification实例的falg设置通知属性;

  • 发送通知的应用图标或者发送人的头像
  • 通知标题和消息
  • 时间戳
  • 当主图标显示发送人头像时,在副图标位置显示应用图标

2.一些常用的设置方法

通知实例的获得:通过Builder类的builder()方法创建;

美高梅网上注册平台 1通知的基本布局

2.1当你创建通知的时候会使用到NotificationCompat来构建一个通知.常用到的方法如下:

  • setContentTitle("") 设置通知的标题
  • setContentText("") 设置通知的内容
  • setSmallIcon(R.mipmap.XXX) 设置通知显示的小图片(这里要注意,如果你设置的图片过大的话会抛出一个异常)这里注意小图标必须有,否则不显示通知
  • setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.XXX)) 设置通知右下角显示的图片,这里面说的是是大图标,但是我在我的手机上却显示在右边,但是如果你设置一个较大的图片的时候,虽然不会报错,但是不会显示,当我不去设置smallIcon的时候,设置这个的时候整个通知栏都不显示了.其实当只设置smallIcon没有设置LargeIcon的时候,SmallIcon的图标将会出现在LargeIcon的位置,而小图标的位置将不会有图标,但两者同时设置的时候LargeIcon将会出现在LargeIcon位置,SmallIcon也会出现在SmallIcon的位置.
  • setTicker("") 设置状态栏的提示内容
  • setContentIntent(pendingIntent) 设置通知栏点击既执行的意图,和Intent的作用类似,但是写法不同.

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,XXX.class), 0);
    

    这里说明下里面的参数:

    • 参数1 上下文
    • 参数2 请求码
    • 参数3 intent对象
    • 参数4 这个是一个flag表示位,会有一下几种
      • FLAG_ONE_SHOT 表示这个意图只可以使用一次,后续的通知单击后无法打开
      • FLAG_NO_CREATE 发现已经存在时,忽略新的请求,继续使用老的,日常开发中很少使用
      • FLAG_CANCEL_CURRENT 如果新请求的PendingIntent发现已经存在时,取消已经存在的,用心的替换老的
      • FLAG_UPDATE_CURRENT 如果新情求的PendingIntent发现已经存在时,如果Intent有字段改变了,就更新已存在的PendingIntent
  • setNumber(int) 设置通知及和的数量(没见到别人用过)

  • setWhen(System.currentTImeMillis()) 设置通知产生的时间,会在通知信息里显示,一般时系统获取到的时间,如果不去设置取系统的时间
  • setPriority(Notification.PRIORITY_DEFAULT) 设置通知的优先级,这个优先级是从-2~2 这里设置的是默认的是0(一般是在广播中设置这个属性),这里写一下你可以设置的参数吧:
    • Notification.PRIORITY_DEFAULT 默认
    • Notification.PRIORITY_HIGH 高
    • Notification.PRIORITY_LOW 低
    • Notification.PRIORITY_MAX 最高
    • Notification.PRIORITY_MIN 最低
  • setAutoCancel(boolean) 用户点击该通知,是否关闭此条通知
  • setOngoning(boolean) 点击或者侧滑通知,通知是否会消失,一般利用它都是设置一个正在运行的通知,如音乐播放或者下载进度等一些特殊的场景,要设置成true
  • setDefaults(Notification.DEFAULT_VIBRATE) 给通知添加声音,闪灯和震动效果,可以组合使用,具体参数为
    • Notification.DEFAULT_VIBRATE 添加默认震动提醒
    • Notification.DEFAULT_SOUND 添加默认声音提醒
    • Notification.DEFAULT_LIGHTS 添加默认三色灯提醒
    • Notification.DEFAULT_ALL 添加默认以上3种全部提醒
  • setVibrate(long[] pattern) 设置自定义震动模式 如:setVibrate(new long[] {0,200,200,300});//延迟0秒,然后震动200ms,在延迟200ms,接着震动300ms
  • setLights(int RGB,int onTime,int lowLight) 设置自定义灯光,这里说明一下参数和注意事项
    • 参数1: RGB灯光颜色
    • 参数2: 亮持续的时间
    • 参数3: 暗持续的时间
    • 注意: 只有在设置了标识符Flags为Notification.FLAG_SHOW_LIGHTS的时候,才支持三色灯提醒
  • setSound(Uri music) 设置自定义音乐 如:setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))
  • setProgress(int max,int progress,boolean indeterminare) 设置带进度条的通知,这里说一下参数3,代表进度是否确定,当确定的时候是具体的progress,但是不确定的时候是连续的短线.
  • addAction(int icon, CharSequence title, PendingIntent intent) 添加一个点击后出现的按钮,添加多了会出现一排图标,最多可以添加5个.并且每个都能设置相应的点击事件.这个最好看后面的3.2讲的内容,说下参数,参数1:图标的资源id,参数2:图标显示的名称,参数3:图标对应要启动的PendingIntent

通知的发送:通过notificationManger的notify()方法发送通知;

通知的扩展布局显示消息的前面几行或者图片的预览,后面的信息折叠起来,这样用户就可以看到更多的信息。用户可以通过 pinch-zoom 或者双手指滑动来打开扩展布局。Android 为单条消息提供了两种扩展布局 供你开发应用时使用。

2.2当你创建通知的时候会使用到Notification.常用到的方法如下:

当你使用builder构建出一个Notification的时候,也可以更改一些参数:
notification.flags = Notification.FLAG_AUTO_CANCEL; 设置提醒标识符,具体参数:

  • 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通知的扩展布局

3.进阶使用

1.创建Notification的builder类

从 Jelly Bean 开始,Android 支持在通知底部显示附加操作。通过这些操作,用户可以对通知直接执行常见的任务,而不用打开应用。这样可以加快操作,配合上滑出消失操作,使用户的通知抽屉体验更加顺滑。可以放入通知中的操作有以下特点:

3.1 自定义的通知栏效果(RemoteViews)

Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件,不支持这些类的子类或Android提供的其他控件。否则会引起ClassNotFoundException异常

一般的步骤如下:

  1. 创建自定义视图
  2. 获取远程视图对象
  3. 设置PendingIntent来相应事件
  4. 发起Notification

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

  • 对于该通知重要、常用和典型的操作
  • 时间紧迫的
  • 不会与相邻的操作重复的

3.1.1自定义带按钮的通知栏

  • 创建自定义视图,这里的布局就是一个随便的布局,但是其实你写太大也没有用,这个后面讲.

    RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.view_custom_button);
    
  • 获取远程视图对象
    这里说明一下,前面那个ID是视图中定义的ID,其实这里设置所有内容,都需要根据ID匹配,然后进行设置的,也算是提供的方法了,这里就不要去纠结了.

    • 设置图片

      remoteViews.setImageViewResource(R.id.custom_song_icon, R.drawable.ic_launcher_background);
      
    • 设置监听事件

      remoteViews.setOnClickPendingIntent(R.id.btn_1, pendingIntent);
      
  • 设置相应的pendingIntent,其实和上面设置PendingIntent的方法一样,这里就不去写了.

  • 发起Notification

            Notification notification = builder.setContent(remoteViews)
                    .setWhen(System.currentTimeMillis())
                    .setTicker("正在播放")
                    .setSmallIcon(R.drawable.ic_stat_name)
                    .build();
            notification.flags = Notification.FLAG_AUTO_CANCEL;
    
            mManager.notify(2, notification);
    

其实别的方法都差不多,就是这里注意一下涉及资源的时候,其他的都是一样的.

2.利用builder实例设置Notification属性:

不要放置:

3.1.2不带按钮的通知栏

其实和上面的都差不多,只是没有的相应的PendingIntent,多了一个设置文字的方法,这里就直接贴代码了!

        //先设定RemoteViews  
        RemoteViews view_custom = new RemoteViews(getPackageName(), R.layout.custom);  
        //设置对应IMAGEVIEW的ID的资源图片  
        view_custom.setImageViewResource(R.id.custom_icon, R.drawable.icon);  
        view_custom.setTextViewText(R.id.custom_title, "标题");  
        view_custom.setTextViewText(R.id.custom_content, "显示的内容"); 

//设置通知标题栏内容

builder.setContentTitle("通知的标题")

//设置通知详细信息栏内容

.setContentText("通知的内容")

//设置大小图标会在下main继续讲

.setSmallIcon(R.mipmap.ic_launcher)

.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.aa))

.setTicker("状态栏中提示内容")

//设置通知栏点击执行的意图 pendingIntent(也就是点击完成跳转);

.setContentIntent(pendingIntent)

//设置通知集合的数量(没用到过)

.setNumber(6)

//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间

//如果不写,默认为通知发出时系统的时间;

.setWhen(System.currentTimeMillis())

//设置该通知优先级(在广播中用过这个属性)

.setPriority(Notification.PRIORITY_DEFAULT)

//设置这个标志当用户单击面板就可以让通知将自动取消

.setAutoCancel(false)

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

.setOngoing(true);

//提示模式

.setDefaults(Notification.DEFAULT_VIBRATE)

  • 模糊的
  • 和点击通知得到的效果一样的操作,例如阅读或者打开

3.2大图风格通知(4.1之前的版本不支持此功能)

只有在通知栏被展开时显示,何时展开呢?通知栏处在顶端,或者用户通过手势展开的时候显示.分为几种效果,但是写法其实都差不多,下面说说这几种风格,其实这些风格,比普通视图多出一个详情区域!

  • NotificationCompat.BigPictureStyle 大图片风格:详情区域包含一个256dp高度的位图
  • NotificationCompat.BigTextStyle 大文字风格:显示一个大的文字块
  • NotificationCompat.InboxStyle 收件箱风格:显示多行文字
  • NotificationCompat.MediaStyle 音乐风格:显示音乐风格(这个风格特殊说明一下, 出现的是一些列的图标,可以给相应的图标设置相应的事件,这些事件是添加到相应的NotificationCompat.Builder.setStyle()去添加的,最多可以添加5个),这个类是v7包下的

但是这个详情区域出现的方式各不相同,我的手机是按住下拉,有的手机是点击之后出现,有的是直接出现,这里自己多尝试一下就知道了!

方法详解:

从 Jelly Bean 开始,Android 为通知增加了优先级标志。这样你可以使重要的通知相对于其他通知,总是显示在第一个。请通过以下的表格仔细选择通知的优先级

3.2.1各个版本中的公共方法和各自的方法

先说一下公共方法!

  • setBigContentTitle("") 大通知栏的标题
  • setSummaryText("") 末尾只一行的文字内容

其他都是单独存在的方法!

  • NotificationCompat.BigPictureStyle
    • bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.small)) 添加一张相应的图片
  • NotificationCompat.BigTextStyle
    • bigText() 添加相应文字的方法
  • NotificationCompat.InboxStyle
    • addLine("") 直接添加每行的显示内容
      -NotificationCompat.MediaStyle
    • setMediaSession(new MediaSessionCompat(this,"MediaSession",new ComponentName(MainActivity.this,Intent.ACTION_MEDIA_BUTTON),null).getSessionToken());
    • setCancelButtonIntent(pendingIntent) 在5.0以下有效,设置取消后的意图
    • setShowCancelButton(boolean) 会在通知栏的右上部分显示一个删除图标5.0一下有效
    • setShowActionInCompactView(2,3) 添加action所在的action组的数组的下标,从0开始,低版本上也可以显示

这个我觉得应该贴一下代码了!

    private void mediaStyle(){
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setContentTitle("MediaStyle");
        builder.setContentText("Song Title");
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.notification));
        builder.setDefaults(NotificationCompat.DEFAULT_ALL);
        Intent intent = new Intent(this,ImageActivity.class);
        PendingIntent pIntent = PendingIntent.getActivity(this,1,intent,0);
        builder.setContentIntent(pIntent);
        //第一个参数是图标资源id 第二个是图标显示的名称,第三个图标点击要启动的PendingIntent
        builder.addAction(R.drawable.ic_previous_white,"",null);
        builder.addAction(R.drawable.ic_stop_white,"",null);
        builder.addAction(R.drawable.ic_play_arrow_white_18dp,"",pIntent);
        builder.addAction(R.drawable.ic_next_white,"",null);
        NotificationCompat.MediaStyle style = new NotificationCompat.MediaStyle();
        style.setMediaSession(new MediaSessionCompat(this,"MediaSession",
                new ComponentName(MainActivity.this,Intent.ACTION_MEDIA_BUTTON),null).getSessionToken());
        //CancelButton在5.0以下的机器有效
        style.setCancelButtonIntent(pIntent);
        style.setShowCancelButton(true);
        //设置要现实在通知右方的图标 最多三个
        style.setShowActionsInCompactView(2,3);
        builder.setStyle(style);
        builder.setShowWhen(false);
        Notification notification = builder.build();
        manger.notify(TYPE_Media,notification);
    }

最后通过NotificationCompat.Builder.setStyle()设置进去就可以了

.setSmallIcon(R.mipmap.ic_launcher)

.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.aa))

.setTicker("状态栏中提示内容")

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

4.类似与QQ的在手机屏幕顶端出现的通知(只有在5.0以上系统中有效哦)

NotificationCompat.Builder.setFullScreenIntent(pIntent,true);

第一种:当只设置了SmallIcon没有设置LargeIcon的时候:SmallIcon的图标将会出现在LargeIcon的位置,而小图标位置将不会又图标。

美高梅网上注册平台 3通知的优先级

4.常见的问题

第二中:当既有SmallIcon又有LargeIcon的时候,LargeIcon将会出现在LargeIcon位置,SmallIcon也会出现在SmallIcon的位置;

  1. 创建一个通知管理类NotificationManager,通过调用 getSystemService()的方法获得。getSystemService方法接收一个字符串参数用于确定获取系统的哪个服务,传入Context.NOTIFICATION_SERVICE

4.1如何取消掉通知栏上的通知

  1. 设置相应的flags = FLAG_AUTO_CANCEL
  2. 通过手动调用NotificationManager.cancle()方法关闭指定的通知或者通过NotificationManager.cancleAll()关闭所有通知.

关于常见的问题,等到以后用到的时候在去好好总结以下,现在总结的话或许会不那么完全,当你读到这篇文章后,要是有什么问题请和我联系,我会及时帮助你解决的,也能促进自己的提高...

setTicker()是在通知发出的时候,在状态栏弹出的提示内容(弹出提示的内容又小图标和Ticker方法中的内容)

注意:小图标必须有,否则将无法显示通知;

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

.setPriority(Notification.PRIORITY_DEFAULT)//设置通知的优先级别

  1. 使用Builder构造器创建Notification对象。这里使用 support-v4库中提供的NotificationCompat

Notification.PRIORITY_DEFAULT     默认

Notification.PRIORITY_HIGH             高

Notification.PRIORITY_LOW              低 

Notification.PRIORITY_MAX              最高

Notification.PRIORITY_MIN               最低

.setDefaults(int defaults)(需要 VIBRATE permission) ;

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder; 或者这样写:Notification notification = NotificationCompat.Builder.builder(); 

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

  1. 对Builder进行配置(写法和dialog差不多)

对应属性:

Notification.DEFAULT_VIBRATE    //添加默认震动提醒  

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

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

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

 mBuilder.setContentTitle//设置通知栏标题 .setContentText //设置通知栏显示内容 .setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //设置通知栏点击意图 // .setNumber //设置通知集合的数量 .setTicker //通知首次出现在通知栏,带上升动画效果的 .setWhen(System.currentTimeMillis//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间 .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级 // .setAutoCancel//设置这个标志当用户单击面板就可以让通知将自动取消 .setOngoing//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接) .setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合 //Notification.DEFAULT_ALL Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission .setSmallIcon(R.drawable.ic_launcher);//设置通知小ICON 

  1. 设置通知栏PendingIntent(点击动作事件等都包含在这里)。PendingIntent 从名字上看和Intent 很像,它们都指明一个意图,都可以开启活动,开启服务和发送广播。但是Intent 倾向于立即执行某个动作,而PendingIntent 倾向于某个时机执行动作。

  2. 美高梅网上注册平台,最后一步,发送通知请求

setVibrate(long[] pattern)设置自定义震动模式

//延迟0ms,然后振动200ms,在延迟200ms,接着在振动300ms。

mNotificationManager.notify(notifyId, mBuilder.build; 

本文由美高梅网上注册平台发布于美高梅网上注册平台,转载请注明出处:美高梅网上注册平台你看到的消息提示框就是通

上一篇:需要用户进行授权,这类权限一般不涉及用户隐 下一篇:没有了
猜你喜欢
热门排行
精彩图文