美文网首页
Android中通知的使用

Android中通知的使用

作者: 笔墨Android | 来源:发表于2017-12-16 21:25 被阅读0次

不怕跌倒,所以飞翔

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

本文主要知识点概要:

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

1. 简单使用

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

1.1创建一个NotificationManager对象

NotificationManager mManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

通过NotificationManager来管理通知内容;

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);

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

2.一些常用的设置方法

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

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 表示正在运行的服务

3.进阶使用

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

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);
    

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

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, "显示的内容"); 

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

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

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

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

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()设置进去就可以了

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

NotificationCompat.Builder.setFullScreenIntent(pIntent,true);

4.常见的问题

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

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

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

相关文章

  • Android中通知的使用

    不怕跌倒,所以飞翔 参考文献:ASleepyCoder的Android Notification常见样式总结文章v...

  • Android 中通知的基本使用

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

  • Android手机中的通知使用

    通知(Notification)是Android系统中比较有特色的一个功能 创建一个通知的步骤 获取通知的管理对象...

  • Android和iOS自定义通知声音

    Android 自定义通知声音 在安卓开发中、很多时候要使用通知提醒用户、那么使用通知就会设计到通知的提示音、那么...

  • 《Android第一行代码》first reading 十

    Android多媒体运用 一 通知 使用Android通知功能步骤: 通过Context的getSystemSer...

  • Android Notification(兼容 Android

    通知栏通知在Android APP中的使用极为频繁,比如短信通知,QQ,微信消息通知,App 更新进度转态显示,截...

  • Android Notification通知

    Android官网通知通知是Android中经常使用的一个功能,本文记录以8.0版本为分割的通知使用方式,下图为通...

  • Android 使用通知

    Android 8.0 引入了通知渠道的概念可以为每条通知创建一个对应的渠道,达到对通知分类的目的。用户可以在手机...

  • Android通知的使用

    1.通知(Notification)是Android中比较有特色的功能2.既可以在活动中(Activity)中创建...

  • Android通知的使用

    当用户在使用APP的过程中,如果某些重要的功能需要及时提醒用户知道而且在不影响用户的前提下,我们通常会使用通知在后...

网友评论

      本文标题:Android中通知的使用

      本文链接:https://www.haomeiwen.com/subject/bxeewxtx.html