Android:通知栏的使用
非常久没有使用Android的通知功能了,今天把两年前的代码搬出来一看。发现非常多方法都废弃了,代码中各种删除线看的十分不爽。于是乎,打开Google,查看官方文档。学习最新的发送通知栏消息的方法。
本文中的代码均參照谷歌官方文档编写:
http://developer.android.com/guide/topics/ui/notifiers/notifications.html
1.首先。获取系统的通知服务:
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
2.发送一个最简单的通知
public void simpleNotice(View view) {
//此Builder为android.support.v4.app.NotificationCompat.Builder中的,下同。
Builder mBuilder = new Builder(this);
//系统收到通知时。通知栏上面显示的文字。
mBuilder.setTicker("天津。晴,2~15度,微风");
//显示在通知栏上的小图标
mBuilder.setSmallIcon(R.drawable.consult_answer);
//通知标题
mBuilder.setContentTitle("天气预报");
//通知内容
mBuilder.setContentText("天津,晴,2~15度。微风");
//设置大图标,即通知条上左側的图片(假设仅仅设置了小图标,则此处会显示小图标)
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.share_sina));
//显示在小图标左側的数字
mBuilder.setNumber(6);
//设置为不可清除模式
mBuilder.setOngoing(true);
//显示通知,id必须不反复,否则新的通知会覆盖旧的通知(利用这一特性。能够对通知进行更新)
nm.notify(1, mBuilder.build());
}
3.删除一个通知。參数即为通知的id
nm.cancel(1);
4.发送一个通知。点击通知后跳转到一个Activity,从这个Activity返回后,进入程序内的某一个页面(一般为主页)
//点击通知进入一个Activity,点击返回时进入指定页面。
public void resultActivityBackApp(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题2");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("通知标题2");
mBuilder.setContentText("点击通知进入一个Activity,点击返回时进入指定页面。 "); //设置点击一次后消失(假设没有点击事件。则该方法无效。 )
mBuilder.setAutoCancel(true); //点击通知之后须要跳转的页面
Intent resultIntent = new Intent(this, ResultActivityBackApp.class); //使用TaskStackBuilder为“通知页面”设置返回关系
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
//为点击通知后打开的页面设定 返回 页面。(在manifest中指定)
stackBuilder.addParentStack(ResultActivityBackApp.class);
stackBuilder.addNextIntent(resultIntent); PendingIntent pIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pIntent);
// mId allows you to update the notification later on.
nm.notify(2, mBuilder.build());
}
同一时候。须要在manifest中为点击通知后打开的Activity指定父Activity.
<activity
android:name=".ResultActivityBackApp"
android:parentActivityName=".MainActivity"> <meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" /> </activity>
(当中,activity的属性parentActivityName为API 16中的属性。meta-data中的代码为兼容API 16下面。
因此,对于大多数程序。这两个地方都得写。)
5.和上述4类似,仅仅是在打开的Activity中返回时回到home页
//点击通知进入一个Activity,点击返回时回到桌面
public void resultActivityBackHome(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题3");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("通知标题3");
mBuilder.setContentText("点击通知进入一个Activity,点击返回时回到桌面"); //设置点击一次后消失(假设没有点击事件,则该方法无效。)
mBuilder.setAutoCancel(true); Intent notifyIntent = new Intent(this, ResultActivityBackHome.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pIntent); nm.notify(3, mBuilder.build());
}
6.带进度条的通知
public void progressNotice(View view) {
final Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题4");
mBuilder.setContentTitle("Picture Download")
.setContentText("Download in progress")
.setSmallIcon(R.drawable.ic_launcher);
// Start a lengthy operation in a background thread
new Thread(new Runnable() {
@Override
public void run() {
int progress;
for (progress = 0; progress <= 100; progress++) {
// Sets the progress indicator to a max value, the current completion percentage,
// and "determinate" state
mBuilder.setProgress(100, progress, false);
//不明白进度的进度条
// mBuilder.setProgress(0, 0, true);
nm.notify(4, mBuilder.build());
// 模拟延时
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// When the loop is finished, updates the notification
mBuilder.setContentText("Download complete");
// Removes the progress bar
mBuilder.setProgress(0, 0, false);
nm.notify(4, mBuilder.build());
}
}
).start();
}
7.扩展布局的通知。按住通知条下滑,能够查看更具体的内容
public void expandLayoutNotice(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题5");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("通知标题5");
mBuilder.setContentText("按住通知下拉可显示扩展布局");
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
String[] events = new String[]{"Beijing", "Tianjin", "Shanghai", "Guangzhou"};
// 设置扩展布局的标题
inboxStyle.setBigContentTitle("Event tracker details:");
for (String s : events) {
inboxStyle.addLine(s);
}
mBuilder.setStyle(inboxStyle);
nm.notify(5, mBuilder.build());
}
8.自己定义布局的通知栏。(依据谷歌的官方文档不推荐这么做。由于使用这样的方式时,对不同屏幕进行适配须要考虑的因素太多。
并且,通知栏应该展示的就是最简明扼要的信息。对于大多数程序默认的布局已经足够了。
)
//自己定义布局的通知
public void customLayoutNotice(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题6");
mBuilder.setTicker("通知标题6");
mBuilder.setSmallIcon(R.drawable.ic_launcher); RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_layout_notice);
mBuilder.setContent(remoteViews);
//为RemoteViews上的按钮设置文字
remoteViews.setCharSequence(R.id.custom_layout_button1, "setText", "Button1");
remoteViews.setCharSequence(R.id.custom_layout_button2, "setText", "Button2"); //为RemoteViews上的按钮设置点击事件
Intent intent1 = new Intent(this, CustomLayoutResultActivity.class);
intent1.putExtra("content", "From button1 click!");
PendingIntent pIntentButton1 = PendingIntent.getActivity(this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.custom_layout_button1, pIntentButton1); Intent intent2 = new Intent(this, CustomLayoutResultActivity.class);
intent2.putExtra("content", "From button2 click!");
PendingIntent pIntentButton2 = PendingIntent.getActivity(this, 1, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.custom_layout_button2, pIntentButton2); nm.notify(6, mBuilder.build());
}
Android:通知栏的使用的更多相关文章
- android通知栏Notification点击,取消,清除响应事件
主要是检测android通知栏的三种状态的响应事件 这次在实现推送需求的时候,要用到android通知栏Notification点击后进入消息页面,因为要实现一个保存推送用户名字的功能,我在点击后处理 ...
- Android --通知栏Notification
参考博客:Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它) //创建一个通知栏的Builder构造类 (Create a Notification Bui ...
- Android通知栏介绍与适配总结(上篇)
此文已由作者黎星授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知 ...
- Android通知栏介绍与适配总结
由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知栏玩法,谷歌也不得不对其进行更新迭代调整,增加新功能的同时,也在不断地改变样式,试图迎合更 ...
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...
- Android 通知栏用法例子
当程序意外退出时,可以去掉通知栏上显示的图标 1.创建TestNotificationActivity activity类, package com.notioni.test.notification ...
- Android 通知栏系列....
转:http://blog.csdn.net/vipzjyno1/article/details/25248021 在android的应用层中,涉及到很多应用框架,例如:Service框架,Activ ...
- Android抽屉(SlidingDrawer --类似android通知栏下拉效果)
Android抽屉(SlidingDrawer)的实现发 - 红黑联盟http://www.2cto.com/kf/201301/182507.html 可动态布局的Android抽屉之基础http: ...
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你全然了解它)
在android的应用层中,涉及到非常多应用框架.比如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架.通知机制,ActionBar框架等等. ...
- 【转】 [置顶] Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
在Android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...
随机推荐
- C++多态原理
C++的多态性是通过动态绑定实现的 非虚函数是在编译时绑定的; 通过对象进行的函数(虚函数,非虚函数)也是编译时绑定的; C++编译器在编译的时候,要确定每个对象调用的函数(要求此函数是非虚函数)的地 ...
- [转]PostgreSQL事务处理机制
原文链接:http://blog.chinaunix.net/uid-20726500-id-4040024.html 事务的实现原理可以解读为DBMS采取何种技术确保事务的ACID特性.Postgr ...
- linux下利用sed重命名文件
3 for file in `ls ./*.*` 4 do 5 mv $file `echo $file|sed 's/IM_21R_ID331/1M21R_ID331/g'` 6 done ...
- 新浪微博中tableview中头部信息
摘自http://www.cnblogs.com/gcb999/p/3151665.html #import <UIKit/UIKit.h> @class User; @protocol ...
- CSS3_3D效果(IE10_火狐_谷歌)
好久没写博客了,看了下记录,上次最后写的最后一篇已经是8月1号了,最近有些小东西整理下,当巩固吧 废话少说,直奔本文主题 css3提供了很多新鲜好玩的东西,transform就是其中一个,可以进行 2 ...
- Java网络编程:利用Java mail包发送电子邮件
下面代码是利用Java mail包封装了一个发送邮件的类 import java.io.File; import java.util.ArrayList; import java.util.Date; ...
- ORACLE FLASHBACK DATABASE 知识整理
1.知识储备 1) 只有SYSDBA有权执行,闪回前一定要记录当前SCN 2) 需要停机,并要求处于ARCHIVELOG模式中 3) 闪回日志不能被复用和归档,是自动管理的.RVWR ...
- android4.0蓝牙使能的详细解析 (转载)
此博客是转载过来的哦... 给自己博客定几个部分: (1)写在前面的话:一些写博客时的废话. (2)内容简介:把文章的主要内容或者核心部分作一个框架性的概括,以方便大家阅读. (3)正文:这个不需要解 ...
- [Oracle]TRIGGER
题外话: Oracle 的使用. 以前客户方用的是SQL SERVER,一直在用SQL SERVER,感觉SQL SERVER的用户体验非常好. 不管是开发环境的界面布局到SQL 的写法上,感觉写起来 ...
- webform中几个常用的控件
一,简单控件 1,Lable——标签:在网页中呈现出来的时候会变成span标签 属性:Text——标签上的文字 BackColor,ForeColor——背景色,前景色 Font——字体 Bold- ...