[翻译]Android官方文档 - 通知(Notifications)
翻译的好辛苦,有些地方也不太理解什么意思,如果有误,还请大神指正。
官方文档地址:http://developer.android.com/guide/topics/ui/notifiers/notifications.html







- 一个小图标,通过setSmallIcon()来设定。
- 一个标题,通过setContentTitle()来设定。
- 详细文本,通过setContentText()来设定。
可选的通知内容与设置(Optional notification contents and settings)
NotificationCompat.Builder mBuilder =
newNotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!");
// 为Activity创建一个明确的Intent
Intent resultIntent =newIntent(this,ResultActivity.class); // 栈建造者对象将为启动的Activity制造一个人工的回退栈
// 这样确保了在按回退键的时候,可以从启动的Activity回退到主屏幕上
TaskStackBuilder stackBuilder =TaskStackBuilder.create(this);
// 为Intent添加回退栈,但不是Intent本身
stackBuilder.addParentStack(ResultActivity.class);
// 添加Intent,这个Intent启动Activity并放置它到栈顶
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// mId 允许你在之后更新这个通知
mNotificationManager.notify(mId, mBuilder.build());
NotificationCompat.Builder mBuilder =newNotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("Event tracker")
.setContentText("Events received")
NotificationCompat.InboxStyle inboxStyle =
newNotificationCompat.InboxStyle();
String[] events =newString[6];
// 给收信箱样式的大视图设置一个标题
inboxStyle.setBigContentTitle("Event tracker details:");
...
// 将事件列表放入收信箱中
for(int i=0; i < events.length; i++){ inboxStyle.addLine(events[i]);
}
//将收信箱样式设置给通知对象
mBuilder.setStyle(inBoxStyle);
...
// 在这里写上发布通知的代码
- 为所有的用户提供通知的所有功能,不管他们正在使用哪个版本的Android。为了能够做到这一点,在Activity中验证所有的功能都是可用的。如果必要的话,你可能需要添加一些新的Activity去完成这个工作。
- 确保所有的功能都能在Activity中获取到。通过让通知启动Activity,为了做到这一点,为Activity创建PendingIntent,调用setContentIntent()把PendingIntent添加到通知对象上。
- 现在添加你想要在通知上使用的特性,记住,任何你想要的功能都可以通过点击通知启动Activity来实现。
管理通知(Managing Notifications)
mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 给通知设置一个ID,这个可以用来更新
int notifyID =1;
mNotifyBuilder =newNotificationCompat.Builder(this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
numMessages =0;
// 开启一个循环去处理数据,然后通知用户
...
mNotifyBuilder.setContentText(currentText)
.setNumber(++numMessages);
// 因为ID仍然存在,所以可以更新通知
mNotificationManager.notify(
notifyID,
mNotifyBuilder.build());
...


- 用户手动一条一条的清除通知,或者使用”清除所有“(如果通知允许被清除)。
- 用户点击通知,当你创建这条通知的时候使用了setAutoCancel()。
- 你为一个指定ID的通知调用了cancel(),这个方法也去删除正在执行的通知。
- 你调用了cancelAll()方法,这将移除所有你之前发布的通知。
当启动Activity的时候保留导航(Preserving Navigation when Starting an Activity)
- 在manifest文件中你应用程序的Activity层级。
a.给他Android 4.0.3 以及之前的版本添加支持。为了能够做到这一点,给你要启动的Activity里的<activity>里添加子标签<meta-data>,通过这种方式去指定Activity的父级。
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".ResultActivity"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
...
Intent resultIntent =newIntent(this,ResultActivity.class);
TaskStackBuilder stackBuilder =TaskStackBuilder.create(this);
//添加回退栈
stackBuilder.addParentStack(ResultActivity.class);
// 把Intent添加到栈顶
stackBuilder.addNextIntent(resultIntent);
// 获取包含整个回退栈的PendingIntent
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
...
NotificationCompat.Builder builder =newNotificationCompat.Builder(this);
builder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(id, builder.build());
<activity
android:name=".ResultActivity"
...
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true">
</activity>
...
// 实例化一个建造对象
NotificationCompat.Builder builder =newNotificationCompat.Builder(this);
// 为Activity创建一个Intent
Intent notifyIntent =
newIntent(newComponentName(this,ResultActivity.class));
// 设置这个Activity在一个全新的,空的任务中启动
notifyIntent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
// 创建PendingIntent
PendingIntent notifyIntent =
PendingIntent.getActivity(
this,
0,
notifyIntent
PendingIntent.FLAG_UPDATE_CURRENT
); // 把PendingIntent放入通知
builder.setContentIntent(notifyIntent);
// 通知通过通知管理器发布
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 构建一个匿名的通知发送给通知管理器
mNotificationManager.notify(id, builder.build());
...
mNotifyManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder =newNotificationCompat.Builder(this);
mBuilder.setContentTitle("Picture Download")
.setContentText("Download in progress")
.setSmallIcon(R.drawable.ic_notification);
// 在后台线程开启一个耗时操作
newThread(
newRunnable(){
@Override
publicvoid run(){
int incr;
// 完成一个操作20次
for(incr =0; incr <=100; incr+=5){
// 给进度条设置最大值, 当前的完成度,以及“确定”状态
mBuilder.setProgress(100, incr,false);
// 第一次就显示进度条
mNotifyManager.notify(0, mBuilder.build());
// 睡眠这条线程,模拟耗时操作
try{
// 睡5秒
Thread.sleep(5*1000);
}catch(InterruptedException e){
Log.d(TAG,"sleep failure");
}
}
// 当循环完成的时候更新这个进度条
mBuilder.setContentText("Download complete")
// 删除进度条
.setProgress(0,0,false);
mNotifyManager.notify(ID, mBuilder.build());
}
}
// 开始这个线程
).start();

// 设置进度指示器的最大值,当前完成的百分比,以及“确定”状态
mBuilder.setProgress(100, incr,false);
// 发布通知
mNotifyManager.notify(0, mBuilder.build());
用下面的代码替换上面的代码:
// 为不明确时长的操作添加一个活动指示器
mBuilder.setProgress(0,0,true);
// 发布通知
mNotifyManager.notify(0, mBuilder.build());


[翻译]Android官方文档 - 通知(Notifications)的更多相关文章
- Google Android官方文档进程与线程(Processes and Threads)翻译
android的多线程在开发中已经有使用过了,想再系统地学习一下,找到了android的官方文档,介绍进程与线程的介绍,试着翻译一下. 原文地址:http://developer.android.co ...
- 自己翻译 delegation 官方文档
什么是代理,知道怎么用,见过N次.会用代理传值,还不够.代理到底是用来干嘛的嘛?还是看看官方文档吧,自己翻译出来看看是不是通顺 代理: 代理是一个简单高效的模式,尤其是一个类在编程的过程中代表或者需要 ...
- 为开源社区尽一份力,翻译RocketMQ官方文档
正如在上一篇文章中写道:"据我所知,现在RocketMQ还没有中文文档.我打算自己试着在github上开一个项目,自行翻译."我这几天抽空翻译了文档的前3个小节,发现翻译真的不是一 ...
- [翻译]PyMongo官方文档
PyMongo官方文档翻译 周煦辰 2016-06-30 这是本人翻译的PyMongo官方文档.现在网上分(抄)享(袭)的PyMongo博客文章很多,一方面这些文章本就是抄袭的,谈不上什么格式美观,另 ...
- Apache Flume入门指南[翻译自官方文档]
声明: 根据官方文档选择性的翻译了下,不对请指正 https://flume.apache.org/FlumeUserGuide.html
- 我为什么要翻译ES6官方文档
ES6出来很久了,现在网上也有很多教程,其中以阮一峰老师的教程最为经典.大家通过学习阮老师的教程肯定能学懂ES6最新的技术. ES6官方文档是一个规范,各浏览器在实现ES6的具体API时都会遵循它.我 ...
- 【Android开发】Android Host详解(翻译自官方文档)
原文:http://android.eoe.cn/topic/summary 文档内容 API概述 Android中manifest文件需求 工作的设备 * 发现设备 * 获得和设备进行“交流”的权限 ...
- Android Support Library 23.2介绍(翻译自官方文档)
Android Support Library 23.2 (译者注:本文标注了部分文字链接,但须要***,要查看全部链接.请查看sukey=014c68f407f2d3e181b6b5e665f26a ...
- 学习android 官方文档
9.29 1. 今天,FQ,看到android studio中文网上有一个FQ工具openVPN,我就使用了. 之前用过一个FQ工具开眼,但由于网速慢,我就弃用了. 2. 现在,我就可以FQ去andr ...
随机推荐
- C#——数据库取数据,DataGridView显示数据
使用未封装的方法连接数据库 步骤: 一.确定连接方式(以SqlServer为例): ①Windows身份验证. string ConnectionType = "server=.;datab ...
- Ruby 配置vimrc
https://ruby-china.org/topics/19315 mv ~/Downloads/vim-distinguished-develop/colors/*.vim ~/.vim/col ...
- day5 页面布局
1.主站 <div class='pg-header'> <div style='width:980px;margin:0 auto;'> 内容自动居中 </div> ...
- HDU 6086 Rikka with String
Rikka with String http://acm.hdu.edu.cn/showproblem.php?pid=6086 题意: 求一个长度为2L的,包含所给定的n的串,并且满足非对称. 分析 ...
- 1109: [POI2007]堆积木Klo
1109: [POI2007]堆积木Klo https://lydsy.com/JudgeOnline/problem.php?id=1109 分析: 首先是dp,f[i]表示到第i个的最优值,f[i ...
- Linux checksum flag in kernel
net_device->feature | NETIF_F_NO_CSUM: No need to use L4 checksum, it used for loopback device. | ...
- Keil出错解决方法
1.安装KEIL5后创建工程后出现这个报错 解决方法:打开下图目录的文件. Keil.STM32F1xx_DFP.pdsc文件是只读文件,必须将只读属性取消. 如下图所示,注释掉红色圆圈的哪一行,保存 ...
- mysql增删改查、连表查询、常用操作
一.建表 1.最简单的建表CREATE TABLE user(id int,name char(20),age int); 2.带主键带注释和默认值创建表CREATE TABLE user(id I ...
- static和构造函数初始化顺序
abstract class demo{ public demo() {} protected void a() { System.out.println("I am parents!&qu ...
- K-近邻算法入门
K-近邻算法的直观理解就是:给定一个训练集合,对于新的实例,在训练集合中找到k个与该实例最近的邻居,然后根据“少数服从多数”原则判断该实例归属于哪一类,又称“随大流” K-近邻算法的三大要素:K值得选 ...