精华内容
下载资源
问答
  • 通知栏声音提示并显示,点击可跳转到需要页,并可取消通知栏信息
  • Android 通知栏点击取消

    千次阅读 2015-11-12 14:54:46
    看了很多文章写了怎么取消通知栏的,自己试了就是取消不掉。后来尝试之后实现了,代码写错了。 public class LoginSuccess extends Activity { @Override protected void onCreate(Bundle ...

    看了很多文章写了怎么取消通知栏的,自己试了就是取消不掉。后来尝试之后实现了,代码写错了。

    
    public class LoginSuccess  extends Activity  {
    	
    		
    	@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.success_login);
            Toast.makeText(LoginSuccess.this, "登陆成功", 2000).show();
            NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
            builder.setContentTitle("通知栏标题 ")
            		.setContentText("通知内容")
    //        		.setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL))//点击意图
            		.setTicker("通知首次出现在通知栏,带上升动画效果的")
            		.setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间 
            		.setPriority(Notification.PRIORITY_DEFAULT)
            		.setAutoCancel(true)//用户点击就自动消失
            		.setOngoing(true)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
            		.setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合  
            	    //Notification.DEFAULT_ALL  Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission
            		.setSmallIcon(R.drawable.taobao);//设置通知小ICON  
            Notification notification = builder.build();
            notification.flags = Notification.FLAG_AUTO_CANCEL;
            notificationManager.notify(100, notification);
    //        notificationManager.cancel(100);//通知以后自动消失了
           
        }
    	
    }
    

    错误的代码是:其实已经不是一个对象了。


     Notification notification = builder.build();
     notification.flags = Notification.FLAG_AUTO_CANCEL;
     notificationManager.notify(100, builder.build());


    推荐:http://blog.csdn.net/vipzjyno1/article/details/25248021

    展开全文
  • 消息通知栏demo

    2014-12-22 23:04:47
    以下为程序启动流程: 1.开机启动AlarmService 2.AlarmActivity一秒后发送一条系统广播 ...5.单击消息,取消通知栏信息 6.但程序关闭时,单击消息,重启程序 小知识:BroadCast、Service、Notification,初学者适用
  • Android 实现自定义通知栏,并不断更新通知栏的进度条,模拟下载效果。 注:只是模拟下载进度,没有下载功能。
  • 安卓4.1自带通知栏信息屏蔽  当推送信息出现在通知栏时,下拉通知栏,进入信息列表。然后在想要屏蔽的信息条目上长按,之后会弹出一个“应用程序信 息”的选项,点击进入,就可以看到该信息来自于哪款应用,取消...
    安卓4.1自带通知栏信息屏蔽 
    

          当推送信息出现在通知栏时,下拉通知栏,进入信息列表。然后在想要屏蔽的信息条目上长按,之后会弹出一个“应用程序信 息”的选项,点击进入,就可以看到该信息来自于哪款应用,取消“显示通知”的勾选,之后该应用的推送信息就不会出现在通知栏中了。

    用户可以非常便捷的将不希望再次看到的通知栏信息直接屏蔽掉,但是目前该功能只有在安卓4.1和4.2版本中才可以使用。

    展开全文
  • service前台运行,去除常驻通知栏
  • Android-系统自带通知栏and自定义通知栏

    系统自带通知栏:

    在布局文件中写一个button,写一个sendNotification方法

       
    public void sendNotification(View view){
          //實例化通知管理器
            NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            //實例化通知
            NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
            builder.setContentTitle("系統消息");
            builder.setContentText("來自系統的消息");
            builder.setDefaults(NotificationCompat.DEFAULT_ALL);
            builder.setSmallIcon(android.R.drawable.ic_media_play);
            builder.setContentIntent(PendingIntent.getActivity(this,0x102,new Intent(this,RingActivity.class),0));
    
            Notification notification=builder.build();
            //發出通知.
            notificationManager.notify(0x101,notification);
        }

    
    

    自定义通知栏:

    布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            />
        <TextView
            android:id="@+id/textView1"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:clickable="true"
            />
        <TextView
            android:id="@+id/textView2"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            />
    </LinearLayout>

    Activity:
    package com.example.android_alarmandnotification;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.graphics.Color;
    import android.widget.RemoteViews;;
    import android.content.Context;
    import android.content.Intent;
    public class NotifictionActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Notification notification = new Notification();
          //设置图标,后面的自定义布局的图片会覆盖它,但还是得设置,不然不会显示到通知栏
            notification.icon = android.R.drawable.ic_media_play;
            notification.tickerText = "来信息啦";
            notification.when = System.currentTimeMillis();
            notification.flags = Notification.FLAG_AUTO_CANCEL;
         //传入当前项目的包名,和你通知栏上要显示的自定义布局的ID
            RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.activity_notifiction);
          //下面都是设置通知栏布局里面控件的属性
            remoteViews.setImageViewResource(R.id.imageView1, android.R.drawable.ic_media_play);
            remoteViews.setTextColor(R.id.textView1, Color.RED);
            remoteViews.setTextViewText(R.id.textView1, "今日头条");
            //	PendingIntent有4种flag.
         //	- FLAG_ONE_SHOT 只执行一次
         //	- FLAG_NO_CREATE 若描述的Intent不存在则返回NULL值
        //	- FLAG_CANCEL_CURRENT 如果描述的PendingIntent已经存在,则在产生新的Intent之前会先取消掉当前的
        //	- FLAG_UPDATE_CURRENT 总是执行,这个flag用的最多
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class),
                    PendingIntent.FLAG_UPDATE_CURRENT);
            remoteViews.setOnClickPendingIntent(R.id.textView1, pendingIntent);
            notification.contentView = remoteViews;
            notification.contentIntent = pendingIntent;
            NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            manager.notify(1, notification);
        }
    }


    
    
    展开全文
  • Android 通知栏Notification

    千次阅读 2016-08-02 11:06:08
    Android 通知栏Notification  在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等。  下面...

    Android 通知栏Notification

          在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等。

         下面就来说说经常会使用到通知机制中的通知栏框架(Notificaiton),它适用于交互事件的通知。它是位于顶层可以展开的通知列表。它会时不时的提醒你什么软件该更新了,什么人发你微信消息了等。

    (网上看了下,全面介绍的文章不多,所以就萌生了写这篇的念头,随便当作回顾笔记。下面我就通过官方文档、源代码、书上的一些资料汇总下这一块的知识,并通过一个通知栏的汇总DEMO让大家更好的了解这个类的使用,内容有点多,可以根据需求看目录学习)。

        Notificaiton状态通知栏:

    功能作用

    1.显示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信)  
    2.显示客户端的推送消息(如有新版本发布,广告,推荐新闻等) 
    3.显示正在进行的事物(例如:后台运行的程序)(如音乐播放器、版本更新时候的下载进度等)

    思维导图结构

    思维导图的大体结构(按照各个节点延伸拓展学习)

    Notificaiton -- service   -- BroadcastReceiver  -- Intent(flag、Action等属性应用) --  PendingIntent

    感慨:

    一个Notificaiton通知的拓展使用就要涉及与4大组建的配合,所以学好整体的知识体系。

    联系:

    1.由于service 是在后台运行,所以它意图做什么我们看不到,可以通过Notificaiton 来显示提醒(如音乐的后台播放)。

    2.service服务和BroadcastReceiver广播相结合,在加上Notificaiton 显示(如程序的后台更新)。

    3.Intent作为意图处理,和Notificaiton的点击时间紧密结合在了一起,并且与BroadcastReceiver和service的联系也紧密不可以分割

    (service 在后台之后通过BroadcastReceiver来通知Notificaiton 显示相关东西,在通过Intent完成用户的意图操作

    相关文档:Activity启动模式 及 Intent Flags 与 栈 的关联分析

    对应的官方链接

    设计文档 :   
    开发文档 : http://developer.android.com/reference/android/app/Notification.html

    大体了解

         Notification支持文字内容显示、震动、三色灯、铃声等多种提示形式,在默认情况下,Notification仅显示消息标题、消息内容、送达时间这3项内容。以下就是通知的基本布局。

    通知的基本布局

    普通视图:

    高度64dp

    大试图的通知在展开前也显示为普通视图


    元素:

    1. 标题   Title/Name

    2. 大图标  Icon/Photo

    3. 内容文字   

    4. 内容信息   MESSAGE

    5. 小图标 Secondary Icon

    6. 通知的时间 Timestamp,默认为系统发出通知的时间,也可通过setWhen()来设置


    相关分析

    状态通知栏主要涉及到2个类:  Notification 和 NotificationManager 

    Notification为通知信息类,它里面对应了通知栏的各个属性

    NotificationManager :  是状态栏通知的管理类,负责发通知、清除通知等操作。

    注意:NotificationManager 是一个系统Service,所以必须通过 getSystemService(NOTIFICATION_SERVICE)方法来获取,方法如下。

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);  

    使用步骤:

    流程模块:

    第一步:

    创建一个通知栏的Builder构造类  (Create a Notification Builder)

    第二步:

    定义通知栏的Action  (Define the Notification's Action)

    第三步:

    设置通知栏点击事件    (Set the Notification's Click Behavior)

    第四步:

    通知   (Issue the Notification)

    代码模块:

    实现系统默认的通知栏效果:

    第一步:获取状态通知栏管理:

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);  

    第二步:实例化通知栏构造器NotificationCompat.Builder:

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);  

    第三步:对Builder进行配置:

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. mBuilder.setContentTitle("测试标题")//设置通知栏标题  
    2.     .setContentText("测试内容") /<span style="font-family: Arial;">/设置通知栏显示内容</span>  
    3.     .setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //设置通知栏点击意图  
    4. //  .setNumber(number) //设置通知集合的数量  
    5.     .setTicker("测试通知来啦"//通知首次出现在通知栏,带上升动画效果的  
    6.     .setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间  
    7.     .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级  
    8. //  .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消    
    9.     .setOngoing(false)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)  
    10.     .setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合  
    11.     //Notification.DEFAULT_ALL  Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission  
    12.     .setSmallIcon(R.drawable.ic_launcher);//设置通知小ICON  

    对应的各个方法的属性(部分方法以上代码中已经作注释,就不再介绍):

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

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

    有2种设置方法:

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

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. Notification notification = mBuilder.build();  
    2. notification.flags = Notification.FLAG_AUTO_CANCEL;  
    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)并更新通知以移除指示条


    第四步:设置通知栏PendingIntent(点击动作事件等都包含在这里)

    在第三步中,没有提到一个方法,就是setContentIntent(PendingIntent intent)这个方法,这里拿到这里讲。

    知识点

    1)什么是PendingIntent

    PendingIntent和Intent略有不同,它可以设置执行次数,主要用于远程服务通信、闹铃、通知、启动器、短信中,在一般情况下用的比较少。

    2)PendingIntent什么用

    Notification支持多种Intent来响应单击事件、消除事件、处理紧急状态的全屏事件等。

    这里就用到了setContentIntent(PendingIntent intent)来处理以上这么多的事件。

    3)相关属性和方法

    属性:

    PendingIntent的位标识符:

    FLAG_ONE_SHOT   表示返回的PendingIntent仅能执行一次,执行完后自动取消

    FLAG_NO_CREATE     表示如果描述的PendingIntent不存在,并不创建相应的PendingIntent,而是返回NULL

    FLAG_CANCEL_CURRENT      表示相应的PendingIntent已经存在,则取消前者,然后创建新的PendingIntent,这个有利于数据保持为最新的,可以用于即时通信的通信场景

    FLAG_UPDATE_CURRENT     表示更新的PendingIntent

    方法:


    可以看出,它支持多种相应方式,有Activity、Broadcast、Service,就根据你自身需求去选择。


    在各种情况下情况下它还会根据各种情况出发效果:

    contentIntent:在通知窗口区域,Notification被单击时的响应事件由该intent触发;

    deleteIntent:当用户点击全部清除按钮时,响应该清除事件的Intent;

    fullScreenIntent:响应紧急状态的全屏事件(例如来电事件),也就是说通知来的时候,跳过在通知区域点击通知这一步,直接执行fullScreenIntent代表的事件。


    例如:在执行了点击通知之后要跳转到指定的XXX的Activity的时候,可以设置以下方法来相应点击事件:

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. Intent intent = new Intent(context,XXX.class);  
    2. PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);  
    3. mBuilder.setContentIntent(pendingIntent)  


    例如:在执行了清空全部的通知操作时候,可以设置以下方法来相应这个事件:

    采用setDeleteIntent(PendingIntent intent)方法或按照以下写法

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. Intent deleteIntent = new Intent();  
    2. deleteIntent.setClass(context, XXXReceiver.class);  
    3. deleteIntent.setAction(DELETE_ACTION);  
    4. notification.deleteIntent = PendingIntent.getBroadcast(context, 0, deleteIntent, 0);  

    例如:在响应紧急事件(如来电)时候,可以设置以下方法来相应这个事件:

    采用setFullScreenIntent(PendingIntent intent, boolean highPriority)


    第五步,最简单的一部,发送通知请求

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. mNotificationManager.notify(notifyId, mBuilder.build());  

    拓展


    实现自定义的通知栏效果:

    这里要用到RemoteViews这个类。实现以下2种自定义布局。

    注意

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


    步骤如下:

    1)创建自定义视图

    2)获取远程视图对象(注:Notification的contentView不能为空)

    3)设置PendingIntent(来响应各种事件)

    4)发起Notification

    大体4步骤这里就不详细说了,下面就把DEMO中的列子拿出来说下


    样式:

    1.自定义带按钮通知栏(如下样式)

    正在进行的

    “正在进行的”通知使用户了解正在运行的后台进程。例如,音乐播放器可以显示正在播放的音乐。也可以用来显示需要长时间处理的操作,例如下载或编码视频。“正在进行的”通知不能被手动删除。




    实现方法如下:
    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. /** 
    2.      * 带按钮的通知栏 
    3.      */  
    4.     public void showButtonNotify(){  
    5.         NotificationCompat.Builder mBuilder = new Builder(this);  
    6.         RemoteViews mRemoteViews = new RemoteViews(getPackageName(), R.layout.view_custom_button);  
    7.         mRemoteViews.setImageViewResource(R.id.custom_song_icon, R.drawable.sing_icon);  
    8.         //API3.0 以上的时候显示按钮,否则消失  
    9.         mRemoteViews.setTextViewText(R.id.tv_custom_song_singer, "周杰伦");  
    10.         mRemoteViews.setTextViewText(R.id.tv_custom_song_name, "七里香");  
    11.         //如果版本号低于(3。0),那么不显示按钮  
    12.         if(BaseTools.getSystemVersion() <= 9){  
    13.             mRemoteViews.setViewVisibility(R.id.ll_custom_button, View.GONE);  
    14.         }else{  
    15.             mRemoteViews.setViewVisibility(R.id.ll_custom_button, View.VISIBLE);  
    16.         }  
    17.         //  
    18.         if(isPlay){  
    19.             mRemoteViews.setImageViewResource(R.id.btn_custom_play, R.drawable.btn_pause);  
    20.         }else{  
    21.             mRemoteViews.setImageViewResource(R.id.btn_custom_play, R.drawable.btn_play);  
    22.         }  
    23.         //点击的事件处理  
    24.         Intent buttonIntent = new Intent(ACTION_BUTTON);  
    25.         /* 上一首按钮 */  
    26.         buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_PREV_ID);  
    27.         //这里加了广播,所及INTENT的必须用getBroadcast方法  
    28.         PendingIntent intent_prev = PendingIntent.getBroadcast(this1, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT);  
    29.         mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_prev, intent_prev);  
    30.         /* 播放/暂停  按钮 */  
    31.         buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_PALY_ID);  
    32.         PendingIntent intent_paly = PendingIntent.getBroadcast(this2, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT);  
    33.         mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_play, intent_paly);  
    34.         /* 下一首 按钮  */  
    35.         buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_NEXT_ID);  
    36.         PendingIntent intent_next = PendingIntent.getBroadcast(this3, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT);  
    37.         mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_next, intent_next);  
    38.           
    39.         mBuilder.setContent(mRemoteViews)  
    40.                 .setContentIntent(getDefalutIntent(Notification.FLAG_ONGOING_EVENT))  
    41.                 .setWhen(System.currentTimeMillis())// 通知产生的时间,会在通知信息里显示  
    42.                 .setTicker("正在播放")  
    43.                 .setPriority(Notification.PRIORITY_DEFAULT)// 设置该通知优先级  
    44.                 .setOngoing(true)  
    45.                 .setSmallIcon(R.drawable.sing_icon);  
    46.         Notification notify = mBuilder.build();  
    47.         notify.flags = Notification.FLAG_ONGOING_EVENT;  
    48.         mNotificationManager.notify(notifyId, notify);  
    49.     }  
    注意:带按钮的布局相应点击事件在3.0以下版本没有用,所以这边作了系统版本判断,来显示消失按钮。


    2.自定义不带按钮通知栏


    实现方法如下:
    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1.         //先设定RemoteViews  
    2.         RemoteViews view_custom = new RemoteViews(getPackageName(), R.layout.view_custom);  
    3.         //设置对应IMAGEVIEW的ID的资源图片  
    4.         view_custom.setImageViewResource(R.id.custom_icon, R.drawable.icon);  
    5. //      view_custom.setInt(R.id.custom_icon,"setBackgroundResource",R.drawable.icon);  
    6.         view_custom.setTextViewText(R.id.tv_custom_title, "今日头条");  
    7.         view_custom.setTextViewText(R.id.tv_custom_content, "金州勇士官方宣布球队已经解雇了主帅马克-杰克逊,随后宣布了最后的结果。");  


    之后调用:
    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. <span style="font-family: Arial, Helvetica, sans-serif;">mBuilder.setContent(view_custom)</span>  
    来设定自定义的这个布局。



    实现:大视图风格通知(注:4.1之前的版本不支持大视图


    只在通知被展开时显示

    何时展开:通知处在顶端,或者用户通过收拾展开

    收件箱风格的通知:

    相比普通视图,只多出:7. 详情区域


    效果图如下:

    详情区域根据用途可有多种风格

    1.NotificationCompat.BigPictureStyle 大图片风格:详情区域包含一个256dp高度的位图

    2.NotificationCompat.BigTextStyle 大文字风格:显示一个大的文字块

    3.NotificationCompat.InboxStyle  收件箱风格:显示多行文字  


    各种风格都具有以下常规视图不具有的内容选项:

    1.大标题:在展开视图时替代普通视图的标记

    2.总结文字:允许你在详情区域之下增加一行内容


    拿收件箱风格为例,实现代码如下:
    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1.         NotificationCompat.BigPictureStyle inboxStyle = new NotificationCompat.InboxStyle();  
    2.         String[] events = new String[5];  
    3.         // Sets a title for the Inbox style big view  
    4.         inboxStyle.setBigContentTitle("大视图内容:");  
    5.         // Moves events into the big view  
    6.         for (int i=0; i < events.length; i++) {  
    7.             inboxStyle.addLine(events[i]);  
    8.         }  
    9.         mBuilder.setContentTitle("测试标题")  
    10.                 .setContentText("测试内容")  
    11. //              .setNumber(number)//显示数量  
    12.                 .setStyle(inboxStyle)//设置风格  
    13.                 .setTicker("测试通知来啦");  



    开发中碰到的问题

    注:下面所指的低版本是指2.3及2.3以下版本

    1.如何取消掉通知栏上的通知

      (1)设置对应的flags,让用户点击既被消除:

    notification.flags = FLAG_AUTO_CANCEL;

        (2) 通过手动消除某项或则全部通知

    mNotificationMgr.cancle(NOTIFICATION_ID);//消除对应ID的通知

    mNotificationMgr.cancleAll();//消除创建的所有通知


    2.低版本中的部分方法已经被弃用的

     (1)Notification.Builder(this).getNotification()

     (2)mNotification.setLatestEventInfo(this, "title", "content", null);  

    这些方法都已经被启用,虽然还有效果,可是不建议使用。所以开发过程中尽量使用NotificationCompat.Builder(this)的构建方法去创建一个通知类。


    3.低版本中会报的错误及解决方案:

    (1)错误代码:java.lang.IllegalArgumentException: contentIntent required: pkg=com.example.notifications id=100 notification=Notification(vibrate=default,sound=null,defaults=0x2,flags=0x0)

    解决方案:如果在高版本不会出错,而在2.3上面报了这个错误,通过开发文档中的以下知道你可以找打:

    For this reason, you should always ensure that UI controls in a notification are also available in an Activity in your app, and you should always start that Activity when users click the notification. To do this, use the setContentIntent() method.

    你就应该知道,缺少了setContentIntent() 这个方法,在2.3及更低的版本中,必须给它设置设置contentIntent,如果你点击没有意图,可以在赋值的的Intent中设置为new Intent()既可,切记contentIntent不能为空。

    代码如下:

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. public PendingIntent getDefalutIntent(int flags){  
    2.     PendingIntent pendingIntent= PendingIntent.getActivity(this1new Intent(), flags);  
    3.     return pendingIntent;  
    4. }  


    (2)错误代码:android.app.RemoteServiceException: Bad notification posted from package com.example.notifications: Couldn't expand RemoteViews for: StatusBarNotification(package=com.example.notifications id=101 tag=null notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x2))

    解决方法:

    在自定义的时候,发现了这个问题,解决:每次更新时都必须把RemoteViews给new出来才行,不能利用已有的notification.contentView直接操作!


    4.低版本中,自定义的通知栏中如果带有按钮,可能按钮点击事件会失灵

    解决方法:看其它的应用,好像在低版本都会隐藏掉那些按钮,就是为了不影响用户体验,所以应该就这么解决,判断版本号在去决定是否现在按钮。


    5.低版本中,自定义布局中的字体颜色看不清

    如右图

    解决方案:

    由于2.3及之前版本,背景设是白色的那我们定义字体颜色为系统预设的颜色:

    ?android:attr/textColorPrimary

    在资源的src/values目录中的style.xml文件中设置它标题和内容的样式为:

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. <?xml version="1.0" encoding="utf-8"?>    
    2. <resources>    
    3.     
    4.     <style name="NotificationContent">    
    5.         <item name="android:textColor">?android:attr/textColorPrimary</item>    
    6.     </style>    
    7.     
    8.     <style name="NotificationTitle">    
    9.         <item name="android:textColor">?android:attr/textColorPrimary</item>    
    10.         <item name="android:textStyle">bold</item>    
    11.     </style>    
    12.     
    13. </resources>  


    在2.3之后的版本中(即API >=9的版本中),在资源文件下的src/values-v9目录中的style.xml文件中设置它标题和内容的样式为:

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. <?xml version="1.0" encoding="utf-8"?>    
    2. <resources>    
    3.     
    4.     <style name="NotificationContent" parent="android:TextAppearance.StatusBar.EventContent" />    
    5.     
    6.     <style name="NotificationTitle" parent="android:TextAppearance.StatusBar.EventContent.Title" />    
    7.     
    8. </resources>    


    最后赋给自定义布局中的对应标题和内容对应的style即可。

    对应解决网址:

    1.http://stackoverflow.com/questions/6250356/how-to-use-default-notification-style

    2.http://stackoverflow.com/questions/4867338/custom-notification-layouts-and-text-colors/7320604#7320604

    3.http://developer.android.com/guide/topics/ui/notifiers/notifications.html#CustomExpandedView   (官方文档)

    http://developer.android.com/about/versions/android-2.2-highlights.html


    6.低版本中mBuilder.setProgress(100, progress, false);没用,不显示进度条

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



    7.自定义布局的时候,不同版本方法不一样。(弄了半天,在2.3版本不显示,原来是方法不兼容)


    2.3及2.3之前:

    通过

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. Notification notify = mBuilder.build();  
    2. notify.contentView = view_custom;  
    3. mNotificationManager.notify(notifyId, notify)  
    方法赋予VIEW。

    2.3之后:

    通过Builder以下方法赋于自定义布局。

    mBuilder.setContent(view_custom)



    这里就不贴DEMO中的代码了,大家可以下个DEMO自己看,里面也都有注释的,可能有的地方会有错误,忘大家指出,以便及时修改,谢谢。


    一个DEMO让你更懂Notification

    DEMO截图:

              


    DEMO下载下载地址

    http://blog.csdn.net/vipzjyno1/article/details/25248021/
    展开全文
  • 安卓8.0通知栏适配

    2018-09-09 20:50:07
    一、谷歌为什么在安卓8.0对通知栏进行修改  系统通知栏作为除桌面启动图标之外的唯一入口,对app的日活起到非常重要的作用,因此各个app开发商都希望能抢占用户的通知栏。随着移动端的普及和安卓手机存储容量的...
  • this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//去掉信息栏
  • android NotificationListenerService 监听通知栏,android NotificationListenerService 监听通知栏 android NotificationListenerService 监听通知栏
  • Android更新带进度条的通知栏

    万次阅读 多人点赞 2015-08-06 15:47:05
    在网上查询了下,Android版本更新通知栏带进度条,醉了,基本都是复制过来,有的代码不全,连源码下载都没有,有下载也需要积分,还不能用,真黑心啊!!之前自己也写过自定义通知栏Notification,想了还是自己写吧...
  • 对于通知栏的使用,Android各个版本其实都有比较大的调整。例如老版本的不兼容,大小图标问题以及自定义通知栏适配问题,这些都是比较头大的事,当然弄懂了就清楚了,本篇就处理下这些疑惑。 通知栏的使用 显示一个...
  • 绝对好使的版本更新,它包括一个activity和一个service,并且可以在通知栏里手动取消下载.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android通知栏与界面沟通需求: 当收到新消息时,显示通知栏; 点击通知栏,无论在哪个页面,都需要跳转到消息界面; 当app在后台运行的时候也能收到通知,并且点击通知能够将app在前台显示,并跳转到消息界面; 当...
  • 通知栏Notification的整合

    千次阅读 2016-03-10 14:55:56
    下面就来说说经常会使用到通知机制中的通知栏框架(Notificaiton),它适用于交互事件的通知。它是位于顶层可以展开的通知列表。它会时不时的提醒你什么软件该更新了,什么人发你微信消息了等。
  • Android显示通知栏消息

    千次阅读 2016-03-12 17:18:30
    一、说明 andorid应用经常会有一些推送消息,将数据从后台推向...现在来测试一下如何使用通知栏来显示消息。 二、了解常用类和方法。 1. NotificationManager : 是状态栏通知的管理类,负责发通知、清楚通知等。
  • Android中显示消息通知栏

    千次阅读 2019-06-11 16:13:11
    参考网址:https://blog.csdn.net/qq_35749683/article/details/80451791 https://blog.csdn.net/u011286777/article/details/53319535 /** * 消息通知栏 * @param context * 上下文 * @param cl...
  • Android 音乐播放器的通知栏

    千次阅读 2017-10-05 11:52:03
    Android音乐播放器的通知栏效果说明 我点击×按钮会关闭通知栏和应用, 点击停止按钮会在界面显示停止并且这个按钮的图片换成播放图片,再点击一次界面显示播放,且图片换回来 点击上一首和下一首按钮会在界面上...
  • Android开发通知栏Notification详解

    千次阅读 2016-07-29 08:58:21
    Android通知栏在手机中是很常见的,如音乐,微信收到消息的通知等。下面我们就来讲解一下通知栏是如何创建的。 创建工程InformTest,布局文件很简单,就一个按钮。 ...
  • Android Notification通知栏的必备姿势

    千次阅读 2016-05-18 18:11:54
    android开发,可能经常使用到通知管理者,在手机顶部显示通知。...通常情况下,显示下载进度,播放器通知栏操作,显示APP状态信息,发送友情提示等,都需要用到Notification。一,直接贴代码,直观通知栏
  • 应用里有环信的即时通讯模块,所以在应用...但是将应用放到后台运行时,当接收到新消息时,如果手机没有静音,通知栏还会有铃声和震动提醒,也就是代码里没有控制系统的铃声和震动关闭,所以找到这个问题后,刚开始索性就把给
  • android的消息通知栏

    千次阅读 2014-07-03 16:24:33
    下面就来说说经常会使用到通知机制中的通知栏框架(Notificaiton),它适用于交互事件的通知。它是位于顶层可以展开的通知列表。它会时不时的提醒你什么软件该更新了,什么人发你微信消息了等。
  • android 如何在完全退出APP后延时调出通知(类似于保活) 很好,项目总监在我开心的YY的时候过来提了一个需求:当游戏退出时,请注意不是退出后台,是...实现定时推送信息通知栏 分析: 1.如何触发通知,那肯...
  • Android中通知栏的使用

    千次阅读 2017-04-17 21:28:31
    通知栏的使用其实并不难,但你有没有感觉到随着整个Android的迭代会出现很多种用法,新版本的通知栏API无法兼容老系统这就会是一个很头疼的问题。本篇博文将会通过回顾历史使用情况和通用代码情况以及自定义通知栏来...
  • Android中通知栏Notification的简单介绍

    千次阅读 2018-02-01 15:51:55
    Android通知栏的实现就是用到通知机制中的通知栏框架(Notificaiton),例如聊天后台消息的提示,本地闹钟播放器提示,以及推送的各种消息的显示,都离不开Notificaiton的使用,那么首先我们简单的介绍一下 ...
  • Android 通知栏显示与设置

    千次阅读 2019-04-12 19:42:31
    Android通知栏 Android 基础设置和发送通知在通知栏显示。 Android 版本通知适配 Android 8.0 及以上使用通知都必须设置 NotificationChannel 类才能正常在通知栏弹出通知,只需 Application 中设置一次就可以了。 ...
  • android系统通知栏提示消息

    千次阅读 2015-06-25 08:43:30
    在使用android手机时,大家一定都会接触过系统通知栏提示的消息,如图。。。 我们在开发android程序时也经常会用到这个技术,先奉上初始化的函数一个 private void initNotify(){ mNotificationManager...
  • Android 通知栏Notification深度全面解析

    千次阅读 2015-07-13 18:13:03
    功能介绍:通知栏是位于手机顶层并可以展开收缩的通知列表,常用于交互事件的通知提醒。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,333
精华内容 10,933
关键字:

如何取消通知栏信息