[翻译]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 ...
随机推荐
- VMWare 桥接模式
桥接网络模式是VMware虚拟机中最简单直接的模式. 桥接网络(Bridged Networking) 桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图 ...
- 自定义对象存入Redis
package com.cms.common; import com.alibaba.fastjson.JSON; import com.qiyi.tvguo.cms.common.utils.Obj ...
- 20155334 2016-2017-2 《Java程序设计》第四周学习总结
20155334 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 第六章:继承与多态 继承:面对对象中,子类继承父类,避免重复的行为定义 extends表示会 ...
- [agc003F]Fraction of Fractal
Description 传送门 Solution 本篇博客思路来自大佬的博客(侵删). 我们定义如果网格的第一行和最后一行的第i列都为黑色,则它是一个上下界接口.左右界接口定义同上. 如果上下界接口和 ...
- 我们一起学习WCF 第十篇Wcf中实现事务
数据一致性在工作中显得非常重要,有时候我们库中出现脏数据导致程序报错,但是又很难发现这样的错误,所以为了数据的完整性建议在程序中加入事物. 什么是事物:我们都有团队合作吧,比喻团队有3个人,a负责设计 ...
- TeamViewer卡在正在初始化显示参数
在windows的mstsc远程桌面中打开teamviewer,远程桌面开着的时候可以连接teamviewer,但是当我断开mstsc之后,再用teamviewer连就连接不上了,一直都是正在初始化显 ...
- Python教程 深入条件控制
while 和 if 条件句中可以使用任意操作,而不仅仅是比较操作. 比较操作符 in 和 not in 校验一个值是否在(或不在)一个序列里.操作符 is 和 is not 比较两个对象是不是同一个 ...
- Python基础入门(模块和包)
1 模块 1.1 什么是模块 在 Python 中,一个 .py 文件就称之为一个模块(Module). 我们学习过函数,知道函数是实现一项或多项功能的一段程序 .其实模块就是函数功能的扩展.为什么这 ...
- Harbor配置https,并安装内容信任插件(notary)
1.配置https https://github.com/goharbor/harbor/blob/master/docs/configure_https.md 2.harbor安装notary插件 ...
- 2019CSUST集训队选拔赛题解(一)
来自ppq的毒瘤线段树 Sneakers Description 有一天喜欢买鞋的ppq和小伙伴来到了某一家球鞋店,球鞋店有n种球鞋,价格分别为ai,ppq在鞋店兜兜转转,发现鞋店老板会偶尔将某段 ...