Android Notification通知详解_kazeik的博客-程序员宅基地_android notification

技术标签: android  

根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onStop函数(按退出键除外)里面把notification放在通知栏里,再此显示时,把notification从通知栏里去掉。或者,只要程序在运行就一直显示通知栏图标。

下面对Notification类中的一些常量,字段,方法简单介绍一下:
常量:
DEFAULT_ALL    使用所有默认值,比如声音,震动,闪屏等等
DEFAULT_LIGHTS 使用默认闪光提示
DEFAULT_SOUNDS 使用默认提示声音
DEFAULT_VIBRATE 使用默认手机震动
【说明】:加入手机震动,一定要在manifest.xml中加入权限:
<uses-permission android:name="android.permission.VIBRATE" />
以上的效果常量可以叠加,即通过
notification.defaults =DEFAULT_SOUND|DEFAULT_VIBRATE;  
notification.defaults |= DEFAULT_SOUND (最好在真机上测试,震动效果模拟器上没有)

//设置flag位
FLAG_AUTO_CANCEL  该通知能被状态栏的清除按钮给清除掉
FLAG_NO_CLEAR     该通知能被状态栏的清除按钮给清除掉
FLAG_ONGOING_EVENT 通知放置在正在运行
FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应

          

常用字段:
contentIntent  设置PendingIntent对象,点击时发送该Intent
defaults 添加默认效果
flags 设置flag位,例如FLAG_NO_CLEAR等
icon 设置图标
sound 设置声音
tickerText 显示在状态栏中的文字
when 发送此通知的时间戳

                

NotificationManager常用方法介绍:
public void cancelAll() 移除所有通知(只是针对当前Context下的Notification)
public  void cancel(int id) 移除标记为id的通知 (只是针对当前Context下的所有Notification)
public  void notify(String tag ,int id, Notification notification) 将通知加入状态栏,标签为tag,标记为id
public  void notify(int id, Notification notification) 将通知加入状态栏,标记为id

package com.ljq.activity;
 
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
 
public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        clearNotification();
    }
     
    @Override
    protected void onStop() {
        showNotification();
        super.onStop();
    }
     
    @Override
    protected void onStart() {
        clearNotification();
        super.onStart();
    }
     
    /**
     * 在状态栏显示通知
     */
    private void showNotification(){
        // 创建一个NotificationManager的引用   
        NotificationManager notificationManager = (NotificationManager)    
            this.getSystemService(android.content.Context.NOTIFICATION_SERVICE);   
         
        // 定义Notification的各种属性   
        Notification notification =new Notification(R.drawable.icon,   
                "督导系统", System.currentTimeMillis()); 
        //FLAG_AUTO_CANCEL   该通知能被状态栏的清除按钮给清除掉
        //FLAG_NO_CLEAR      该通知不能被状态栏的清除按钮给清除掉
        //FLAG_ONGOING_EVENT 通知放置在正在运行
        //FLAG_INSISTENT     是否一直进行,比如音乐一直播放,知道用户响应
        notification.flags |= Notification.FLAG_ONGOING_EVENT; // 将此通知放到通知栏的"Ongoing"即"正在运行"组中   
        notification.flags |= Notification.FLAG_NO_CLEAR; // 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用   
        notification.flags |= Notification.FLAG_SHOW_LIGHTS;   
        //DEFAULT_ALL     使用所有默认值,比如声音,震动,闪屏等等
        //DEFAULT_LIGHTS  使用默认闪光提示
        //DEFAULT_SOUNDS  使用默认提示声音
        //DEFAULT_VIBRATE 使用默认手机震动,需加上<uses-permission android:name="android.permission.VIBRATE" />权限
        notification.defaults = Notification.DEFAULT_LIGHTS; 
        //叠加效果常量
        //notification.defaults=Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND;
        notification.ledARGB = Color.BLUE;   
        notification.ledOnMS =5000; //闪光时间,毫秒
         
        // 设置通知的事件消息   
        CharSequence contentTitle ="督导系统标题"; // 通知栏标题   
        CharSequence contentText ="督导系统内容"; // 通知栏内容   
        Intent notificationIntent =new Intent(MainActivity.this, MainActivity.class); // 点击该通知后要跳转的Activity   
        PendingIntent contentItent = PendingIntent.getActivity(this, 0, notificationIntent, 0);   
        notification.setLatestEventInfo(this, contentTitle, contentText, contentItent);   
         
        // 把Notification传递给NotificationManager   
        notificationManager.notify(0, notification);   
    }

    //删除通知    
    private void clearNotification(){
        // 启动后删除之前我们定义的通知   
        NotificationManager notificationManager = (NotificationManager) this 
                .getSystemService(NOTIFICATION_SERVICE);   
        notificationManager.cancel(0);  
 
    }
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kazeik/article/details/17633251

智能推荐

kafka多线程消费和手动提交偏移量java程序示例_lhever_的博客-程序员宅基地_kafka 手动提交偏移量 后是否还会 reblance

本人收藏了一篇关于kafka多线程消费和手动提交偏移量的博文 , 设计思路还不错, 所以也一并分享给大家 :

三极管和MOS管工作状态图解+实例_wilger的博客-程序员宅基地_mos管工作状态

图说三极管的三个工作状态本文引用地址:http://www.eepw.com.cn/article/201603/287845.htm电子元件基础—BJT管大家都知道三极管是电流控制型元件,三极管工作在放大状态下存在Ic=βIb的关系,怎么理解三极管的放大模型呢?这儿我们抛开三极管内部空穴和电子的运动,还是那句话只谈应用不谈原理,希望通过下面的“图解”让初学者对三极管有一个形象的认识。..._1671465600

字体加密 | 字体加密初认识_咸鱼学 Python的博客-程序员宅基地

字体加密初认识不少网站都使用了字体库对数据进行加密,即页面源码中的数据与显示出来的数据不同。实现的效果和昨天发布的那篇关于 X 薯中文网的效果类似,但是原理大不相同。在字...

函数式编程之pipeline——很酷有没有_djph26741的博客-程序员宅基地

Pipelinepipeline 管道借鉴于Unix Shell的管道操作——把若干个命令串起来,前面命令的输出成为后面命令的输入,如此完成一个流式计算。(注:管道绝对是一个伟大的发明,他的设哲学就是KISS – 让每个功能就做一件事,并把这件事做到极致,软件或程序的拼装会变得更为简单和直观。这个设计理念影响非常深远,包括今天的Web Service,云计算,以及大数据的流式计算等等...

laravel php扩展,Laravel深入学习7 - 框架的扩展_MetaD的博客-程序员宅基地

声明:本文并非博主原创,而是来自对《Laravel 4 From Apprentice to Artisan》阅读的翻译和理解,当然也不是原汁原味的翻译,能保证90%的原汁性,另外因为是理解翻译,肯定会有错误的地方,欢迎指正。欢迎转载,转载请注明出处,谢谢!框架的扩展介绍Laravel为我们提供了很多自定义系统组件的扩展点,你甚至可以完全的替换掉他们。比如,哈希结构是由HasherInterfac...

随便推点

如何在VS2003中编译STLPort-4.6.2_hxzb7215191的博客-程序员宅基地

将STLPort解压出来。为STLPort注册环境变量。在VC安装目录里搜索“vcvars32.bat”文件出来。找到INCLUDE这个键,将$(STLPort)/stlport注册进去。然后在机器中的环境变量中注册INCLUDE这个变量,将此目录也注册好。开始编译,进入$(STLPort)/src目录。copy vc71.mak makefile这一步就是将一个vc71版本的mak做为m

对html-css基础知识的复习———慕课网npu_pdsu_zhao的博客-程序员宅基地_oulu-npu数据集下载

1.em和strong共同点:都可以对已知文本进行强调;不同点:em强调的大多为短文本,且程度轻;strong强调的程度较为强烈。2.和区别表示的为换行,即空格;表示的在页面中增加一条水平线。3.

本月程序员7种新书:2019年的最后一份新书书单送你_人邮异步社区的博客-程序员宅基地

2019年的最后一个月,你的年终总结写好了吗?年底了,给自己的身心放个假,放松心情和小编一起看看有哪些新书会与您见面。1、机器学习精讲安德烈·布可夫(Andriy Burkov) 著,韩江雷 译《机器学习精讲》包含了监督和非监督学习、支持向量机、神经网络、集成算法、梯度下降、聚类分类、降维、自编码器、迁移学习、特征工程以及超参数调试等方面的知识。书中既有数学公式,又有图解说明,一应...

java数组冒泡排序和选择排序_wt5264的博客-程序员宅基地

一.冒泡排序冒泡排序思想: 两两比较,大的往后放,第一次比较完毕最大值出现在最大索引处....冒泡排序基本概念是:  依次比较相邻的两个数,将小数放在前面,大数放在后面。  即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。  然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,  直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,  将最大的数放到了最后。在第二趟:仍从...

WebRTC+freeswitch+sipjs视频通话_love942698的博客-程序员宅基地_sipjs 证书

创建CA证书(1)查看openssl的配置文件openssl.cnf的存放位置(即openssl的安装位置)openssl version -a2)查看openssl的配置文件openssl.cnf,因为配置文件中对证书的名称和存放位置等相关信息都做了定义。vim /usr/lib/ssl/openssl.cnf(3)创建为根证书CA所需的目录及文件...

Ant Design Vue 表单组件table之 <s-table>_坎布里奇的博客-程序员宅基地_s-table

代码如下: # 查询条件 &lt;a-form layout="inline"&gt; &lt;a-row :gutter="48"&gt; &lt;template v-if="advanced"&gt; &lt;a-col :md="8" :sm="24"&gt; &lt;a-form-item label="id"&gt; &lt;a-input v-model="queryPara

推荐文章

热门文章

相关标签