Android技巧小结之新旧版本Notification

转载 2015年11月19日 10:42:38

Notification即通知,用于在通知栏显示提示信息。

在较新的版本中(API level  > 11),Notification类中的一些方法被Android声明deprecated(弃用),其实基本上相当于全部弃用了,因为这个类本身方法就少得可怜。

Android官方声明弃用,一定有它的理由,虽然我也不知道是什么。奈何本人轻度强迫症患者,人家都建议你不要用了,那就不要老是恪守着N年前的东西了。

就像是以前,一说到标签页,大家基本上都会想到TabHost配合ActivityGroup,但Android后来提倡Fragment。

废话说多了,还是小结一下使用方法。下面按照创建一个通知的步骤一步一步来,同时给出新旧实现方法。

1、获取Notification管理器

NotificationManager noteMng = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);


2、新建一个Notification,设置状态栏显示样式

private Notification note;
//API 11以下
note = new Notification(R.drawable.ico_launcher "显示于屏幕顶端状态栏的文本", System.currentTimeMillis());
//API 11及以上
Notification.Builder builder = new Notification.Builder(nowContext).setTicker("显示于屏幕顶端状态栏的文本")
.setSmallIcon(R.drawable.ic_laucher);

API 11以上版本中,状态栏显示的样式跟下拉通知栏中显示的样式,可以一起设置,就是通过Notification.Builder类来实现,这里的Builder只调用了两个方法来设置状态栏显示样式。


3、设置Notification标志位(非必要步骤)
//FLAG_ONGOING_EVENT表明有程序在运行,该Notification不可由用户清除
note.flags = Notification.FLAG_ONGOING_EVENT;


4、设置点击Notification后的触发事件
//通过Intent,使得点击Notification之后会启动新的Activity
Intent i = new Intent(nowContext, AnotherActivity.class);
//该标志位表示如果Intent要启动的Activity在栈顶,则无须创建新的实例
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
pendingIntent = PendingIntent.getActivity(nowContext, 100, i, PendingIntent.FLAG_UPDATE_CURRENT);


5、设置Notification在通知栏里的样式
(1)系统默认样式
//API 11以下:
note.setLatestEventInfo(nowContext, "take me to your heart", "Micheal learn to rock", pendingIntent);

//API 16及以上,build()方法要求API 16及以上

//一会API 11以上,一会API16以上,我也很想知道Android的API是怎么设计的
note = builder.setContentIntent(pendingIntent).setContentTitle("title").setContentText("text").build();

(2)自定义样式:

自定义样式,就是让Notification在通知栏显示成自定义的xml布局
应当注意的是,Notification的自定义样式,只支持以下可视组件:
FrameLayout, LinearLayout, RelativeLayout
TextView, Button, AnalogClock, ImageView, ImageButton, Chronometer, ProgressBar

RemoteView view = new RemoteView(nowActivity.getPackageName(), R.layout.note_layout);
//API 11以下
note.contentView = view;
note.contentIntent = pendingIntent;
//API 16及以上,又是build()方法导致的,汗。。
note = builder.setContent(view).setContentIntent(pendingIntent).build();

这个步骤里有一个很值得注意的地方:pendingIntent被设置为note的contentIntent的值,就意味着点击了这个通知才会触发该Intent。

那么如果只是想让自定义布局里的某个按钮触发呢?比如说,弄了一个音乐播放器,Service负责播放音乐,Notification显示当前播放进度和一些简单的暂停按钮、上一首、下一首按钮,让用户不用再打开界面就可以通过Notification上的按钮操纵音乐播放。

假设说想让自定义布局里的一个id为R.id.button1的按钮来触发这个Intent,可以如下操作:

view.setOnClickPendingIntent(R.id.button1, pendingIntent);//在上面创建RemoteView实例后加上这句

然后注意,pendingIntent已经绑定到按钮上了,上面Notificatiion实例中,设置contentIntent的语句要去掉。


6、发布该通知,第一个参数为该notification的ID
noteMng.notify(10, note);


PS:这个是我自己敲的一个txt文件,在我电脑里,可能一些变量名什么的会敲错。

但是大概步骤跟方法相信已经说清楚了。

Android 解决apk覆盖安装的时候,出现安装失败,与旧版本部兼容的问题

当你的apk覆盖安装的时候出现下图所示的情况,然后点击安装,解决方案:1.你需要检查你的新旧apk所使用的签名文件是否是同一个。2.检查你的签名文件是否是发布版本,debug 签名的应用程序不能在 A...
  • Afanbaby
  • Afanbaby
  • 2017年06月21日 19:03
  • 4068

Android通知栏的微技巧(5.0之后小图标与大图标的区别)

对于通知栏的使用,Android各个版本其实都有比较大的调整,包括即将发布的Android 7.0版本,通知栏功能上又要有大动作。那么新版本的通知栏API无法兼容老系统这就会是一个很头疼的问题。...
  • baidujiangwei18
  • baidujiangwei18
  • 2016年05月19日 14:06
  • 4919

android 版本更新 同时清除旧版本数据

1.引导界面同时鉴别是不是新版本,用来重新出现loading页和清除旧版本数据 package com.xionghu.view; import java.util.ArrayList; im...
  • kpioneer123
  • kpioneer123
  • 2016年03月23日 10:28
  • 2203

poi读写Excel文件,兼容新旧版本的简单例子

导入jar包(poi)后,即可操作 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS...
  • zhijiesmile
  • zhijiesmile
  • 2017年03月22日 16:55
  • 150

关于Installshield 2010安装包如何更新旧版本

制作更新包的主要属性: 在给出升级包类型之前,首先说明几个概念: 1 Package code:从字面上理解就是包的代码,在IS中每构建一个包的时候都会给其赋予一个package code,而且是...
  • yulongguiziyao
  • yulongguiziyao
  • 2014年05月04日 17:29
  • 1821

新旧版本FileInputFormat获得输入分片的不同

有接触过hadoop的都应该清楚InputFormat
  • xiao_jun_0820
  • xiao_jun_0820
  • 2014年06月03日 14:22
  • 1038

灵通6100P新旧版本写频软件

  • 2017年12月24日 12:10
  • 4.44MB
  • 下载

HttpClient jar包(新旧版本)

  • 2017年11月22日 16:30
  • 3MB
  • 下载

HFSS新旧版本模型转换,优参和脚本语言

  • 2009年09月10日 18:06
  • 3.26MB
  • 下载

linux 新旧版本 添加自定义脚本为系统服务方法对比

linux旧版本chkconfig方法: chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了...
  • JackLiu16
  • JackLiu16
  • 2018年01月10日 16:13
  • 52
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android技巧小结之新旧版本Notification
举报原因:
原因补充:

(最多只允许输入30个字)