Android Notification通知详解

[1].[代码] [Java]代码 跳至 [1]

view source
print ?
001 Android Notification通知详解
002  
003 根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onStop函数(按退出键除外)里面把notification放在通知栏里,再此显示时,把notification从通知栏里去掉。或者,只要程序在运行就一直显示通知栏图标。
004  
005          
006  
007 下面对Notification类中的一些常量,字段,方法简单介绍一下:
008 常量:
009 DEFAULT_ALL    使用所有默认值,比如声音,震动,闪屏等等
010 DEFAULT_LIGHTS 使用默认闪光提示
011 DEFAULT_SOUNDS 使用默认提示声音
012 DEFAULT_VIBRATE 使用默认手机震动
013 【说明】:加入手机震动,一定要在manifest.xml中加入权限:
014 <uses-permission android:name="android.permission.VIBRATE" />
015 以上的效果常量可以叠加,即通过
016 notification.defaults =DEFAULT_SOUND|DEFAULT_VIBRATE; 
017 notification.defaults |= DEFAULT_SOUND (最好在真机上测试,震动效果模拟器上没有)
018  
019              
020  
021 //设置flag位
022 FLAG_AUTO_CANCEL  该通知能被状态栏的清除按钮给清除掉
023 FLAG_NO_CLEAR     该通知能被状态栏的清除按钮给清除掉
024 FLAG_ONGOING_EVENT 通知放置在正在运行
025 FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应
026  
027            
028  
029 常用字段:
030 contentIntent  设置PendingIntent对象,点击时发送该Intent
031 defaults 添加默认效果
032 flags 设置flag位,例如FLAG_NO_CLEAR等
033 icon 设置图标
034 sound 设置声音
035 tickerText 显示在状态栏中的文字
036 when 发送此通知的时间戳
037  
038                  
039  
040 NotificationManager常用方法介绍:
041 public void cancelAll() 移除所有通知(只是针对当前Context下的Notification)
042 public  void cancel(int id) 移除标记为id的通知 (只是针对当前Context下的所有Notification)
043 public  void notify(String tag ,int id, Notification notification) 将通知加入状态栏,标签为tag,标记为id
044 public  void notify(int id, Notification notification) 将通知加入状态栏,标记为id
045  
046               
047  
048 ?
049 package com.ljq.activity;
050   
051 import android.app.Activity;
052 import android.app.Notification;
053 import android.app.NotificationManager;
054 import android.app.PendingIntent;
055 import android.content.Intent;
056 import android.graphics.Color;
057 import android.os.Bundle;
058   
059 public class MainActivity extends Activity {
060     /** Called when the activity is first created. */
061     @Override
062     public void onCreate(Bundle savedInstanceState) {
063         super.onCreate(savedInstanceState);
064         setContentView(R.layout.main);
065         clearNotification();
066     }
067       
068     @Override
069     protected void onStop() {
070         showNotification();
071         super.onStop();
072     }
073       
074     @Override
075     protected void onStart() {
076         clearNotification();
077         super.onStart();
078     }
079       
080     /**
081      * 在状态栏显示通知
082      */
083     private void showNotification(){
084         // 创建一个NotificationManager的引用  
085         NotificationManager notificationManager = (NotificationManager)   
086             this.getSystemService(android.content.Context.NOTIFICATION_SERVICE);  
087           
088         // 定义Notification的各种属性  
089         Notification notification =new Notification(R.drawable.icon,  
090                 "督导系统", System.currentTimeMillis());
091         //FLAG_AUTO_CANCEL   该通知能被状态栏的清除按钮给清除掉
092         //FLAG_NO_CLEAR      该通知不能被状态栏的清除按钮给清除掉
093         //FLAG_ONGOING_EVENT 通知放置在正在运行
094         //FLAG_INSISTENT     是否一直进行,比如音乐一直播放,知道用户响应
095         notification.flags |= Notification.FLAG_ONGOING_EVENT; // 将此通知放到通知栏的"Ongoing"即"正在运行"组中  
096         notification.flags |= Notification.FLAG_NO_CLEAR; // 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用  
097         notification.flags |= Notification.FLAG_SHOW_LIGHTS;  
098         //DEFAULT_ALL     使用所有默认值,比如声音,震动,闪屏等等
099         //DEFAULT_LIGHTS  使用默认闪光提示
100         //DEFAULT_SOUNDS  使用默认提示声音
101         //DEFAULT_VIBRATE 使用默认手机震动,需加上<uses-permission android:name="android.permission.VIBRATE" />权限
102         notification.defaults = Notification.DEFAULT_LIGHTS;
103         //叠加效果常量
104         //notification.defaults=Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND;
105         notification.ledARGB = Color.BLUE;  
106         notification.ledOnMS =5000//闪光时间,毫秒
107           
108         // 设置通知的事件消息  
109         CharSequence contentTitle ="督导系统标题"// 通知栏标题  
110         CharSequence contentText ="督导系统内容"// 通知栏内容  
111         Intent notificationIntent =new Intent(MainActivity.this, this.getClass()); // 点击该通知后要跳转的Activity 
// 跳回当前活动的Activity
		intent.setAction(Intent.ACTION_MAIN);
		intent.addCategory(Intent.CATEGORY_LAUNCHER);

112         PendingIntent contentItent = PendingIntent.getActivity(this0, notificationIntent, 0);  
113         notification.setLatestEventInfo(this, contentTitle, contentText, contentItent);  
114           
115         // 把Notification传递给NotificationManager  
116         notificationManager.notify(0, notification);  
117     }
118 ?
119     //删除通知   
120     private void clearNotification(){
121         // 启动后删除之前我们定义的通知  
122         NotificationManager notificationManager = (NotificationManager) this
123                 .getSystemService(NOTIFICATION_SERVICE);  
124         notificationManager.cancel(0); 
125   
126     }
127 }



自定义通知
private void showNotification() {
		if (null == notify) {
			// 创建一个通知对象
			// 第一个参数表示状态栏提醒图标
			// 第二个参数表示状态栏提醒文本(只是显示一小段时间)
			// 第三个参数表示通知提醒时间
			notify = new Notification(R.drawable.ic_launcher,
					"我是提示文本,我显示一下我就消失了", System.currentTimeMillis());
			// 第一个参数表示发送该行为的载体(这行为从哪里来)
			// 第二个参数表示requestCode(只是个扩展码,设置默认值0即可)
			// 第三个参数表示具体执行的行为
			// 第四个参数表示PendingIntent的更新方式
			PendingIntent pendingIntent = PendingIntent.getActivity(
					MainActivity.this, 0, new Intent(MainActivity.this,
							Activity02.class),
					PendingIntent.FLAG_UPDATE_CURRENT);
			// 设置通知的具体(下拉)内容
			// 第二个参数表示下拉内容标题
			// 第三个参数表示下拉内容具体提醒部分
			// 第四个参数表示下拉内容点击之后执行的行为
			// notify.setLatestEventInfo(MainActivity.this, "我是下拉内容标题",
			// "我是下拉内容部分",
			// pendingIntent);
			// 创建一个RemoteViewsonic对象以便设置到通知的内容部分
			// 第一个参数表示当前应用包名
			// 第二个参数表示具体布局资源
			RemoteViews contentView = new RemoteViews(getApplication()
					.getPackageName(), R.layout.noti_layout);
			// 设置图片内容(参数:ImageView的id以及ImageView的图片内容)
			contentView.setImageViewResource(R.id.noti_icon,
					R.drawable.notify_icon);
			// 设置文本
			contentView.setTextViewText(R.id.noti_text, "我是自定义的,我的设置方式很特别");
			// 进度条的设置
			// contentView.setProgressBar(R.id.noti_pro, 100, 30, false);
			// 设置内容部分布局
			notify.contentView = contentView;
			// 设置内容部分点击之后的执行行为
			notify.contentIntent = pendingIntent;
			// 设置高级提醒方式(声音、震动、闪灯)
			notify.defaults = Notification.DEFAULT_VIBRATE;
			// 设置通知的清除方式
			notify.flags = Notification.FLAG_AUTO_CANCEL;
		}
		currentPro += 5;
		notify.contentView.setProgressBar(R.id.noti_pro, 100, currentPro, false);
		// 更新通知(如果是第一次调用则通知从无到有创建并显示,如果已经发送,则通知直接改变内容)
		manager.notify(notifyId, notify);

	}



0
0
猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
快速回复 TOP
    个人资料
    Android Notification通知详解_第1张图片
    siyehua
    1
    • 访问:79157次
    • 积分:1560
    • 等级:
    • 排名:第16142名
    • 原创:54篇
    • 转载:102篇
    • 译文:1篇
    • 评论:17条
    文章分类
  • Android(127)
  • Java(20)
  • Ecplise(0)
  • SVN(0)
  • Windows(6)
  • 测试用(1)
  • 其他(3)
    文章存档
  • 2015年10月(1)
  • 2015年08月(1)
  • 2015年07月(1)
  • 2015年06月(2)
  • 2015年05月(3)
  • 2015年04月(2)
  • 2015年03月(1)
  • 2015年02月(1)
  • 2015年01月(4)
  • 2014年12月(18)
  • 2014年11月(5)
  • 2014年10月(11)
  • 2014年09月(6)
  • 2014年08月(2)
  • 2014年07月(7)
  • 2014年06月(2)
  • 2014年05月(6)
  • 2014年04月(10)
  • 2014年03月(15)
  • 2014年02月(6)
  • 2014年01月(6)
  • 2013年12月(18)
  • 2013年11月(29)
    阅读排行
  • Bitmap too large to be uploaded into a texture问题的解决方法(3151)
  • Adnroid Studio使用技巧(2532)
  • Android Studio 视图解析(1838)
  • Android Studio/IntelliJIDEA 快捷键详解(1554)
  • 资源之关于资源文件夹介绍(1285)
  • android 多点触碰实现图片的缩放(1226)
  • Android 上传头像,解决小米3等手机无法直接得到裁剪照片问题(1198)
  • 理解Fragment生命周期(1071)
  • 得到一个BitMap对象(1042)
  • Android抽屉效果(使用LayoutParams来移动View的位置)(1002)
    评论排行
  • android 多点触碰实现图片的缩放(5)
  • Adnroid Studio使用技巧(4)
  • Bitmap too large to be uploaded into a texture问题的解决方法(3)
  • Android Studio 之 Gradle与Project Structure详解(1)
  • 资源之关于资源文件夹介绍(1)
  • 监听APP是否切换到了后台(1)
  • Android Studio 视图解析(1)
  • Android 屏幕适配(好吧,这文章居然是从UI设计网站上摘抄的)(1)
  • win7设置默认用户登录(0)
  • 替换View.(0)
    推荐文章
    • * HDFS如何检测并删除多余副本块
    • * Project Perfect让Swift在服务器端跑起来-让Perfect更Rails (五)
    • * 数据库性能优化之SQL语句优化
    • * Animation动画详解(七)——ObjectAnimator基本使用
    • * 机器学习系列(7)_机器学习路线图(附资料)
    • * 大数据三种典型云服务模式
    最新评论
  • Android 屏幕适配(好吧,这文章居然是从UI设计网站上摘抄的)

    iSnowFlake: Android 做成和IOS一样,设计师这样说就打一顿,两个平台为何要所有交互都一样。工作量多大啊

  • Bitmap too large to be uploaded into a texture问题的解决方法

    EileenChing: @siyehua:到底要怎么重写呢

  • Android Studio 之 Gradle与Project Structure详解

    u011326653: 这么仔细的博文没人赞

  • 资源之关于资源文件夹介绍

    chinben: “400x800也是无法识别的.res下的资源目录的命名规则不允许使用*号.必须使用x.而且400x...

  • 监听APP是否切换到了后台

    li352558693: 亲测,不错!thanks。

  • Android Studio 之 Gradle与Project Structure详解

    a396901990: 图都死了

  • Android Studio 视图解析

    x359981514: 不错

  • Adnroid Studio使用技巧

    siyehua: @x359981514:嗯,这个视频我学习过.

  • Adnroid Studio使用技巧

    x359981514: http://www.imooc.com/learn/206 这里有视频教程哦~

  • Adnroid Studio使用技巧

    siyehua: @scboyhj__:久了就习惯了.

你可能感兴趣的:(Android Notification通知详解)