[翻译]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 ...
随机推荐
- JVM内存模型(转载)
原文地址:http://blog.csdn.net/u012152619/article/details/46968883 JVM定义了若干个程序执行期间使用的数据区域.这个区域里的一些数据在JVM启 ...
- 20155236 2016-2017-2《Java程序设计》课程总结
20155236 2016-2017-2<Java程序设计>课程总结 作业链接汇总 预备作业1:对专业学习的展望,课程方面.师生关系的建议 预备作业2:在实践中学习,自己的相关经验以及C语 ...
- 2016-2017-2 20155302 实验四 Android 开发基础
2016-2017-2 20155302 实验四 Android 开发基础 实验内容 1.下载和安装Android Studio 2.学会使用Android Studio进行简单的Android开发 ...
- Storyboarding by Scripting
Storyboarding by Scripting In the .osu file, under [Events]:Note: underscores can be replaced with s ...
- WPF DataGrid使用简介
1)自动生成列 <DataGrid AutoGenerateColumns="True" Name="datagrid" CanUserAddRows=& ...
- 【BZOJ3142】[HNOI2013]数列
[BZOJ3142][HNOI2013]数列 题面 洛谷 bzoj 题解 设第\(i\)天的股价为\(a_i\),记差分数组\(c_i=a_{i+1}-a_i\) 则 \[ Ans=\sum_{c_1 ...
- string[]转换为int[]
今天碰到一个问题,要把string[]转换为int[],但是又不想使用循环转换,找了好久最后找到了这种方法,特此记录下. string[] input = { "1", " ...
- 使用github高级搜索
想瞅瞅github上面有哪些中国开发者最活跃,followers最多.可以按照下面的步骤: 打开github的搜索页面 输入 location:china .点search 然后选择不同的排序方式. ...
- CC2541调试问题记录-第一篇
1. 在网络环境过于复杂的地方,手机连接不上CC2541.2. 修改CC2541的设备名字. static uint8 scanRspData[] = { // complete name 0x0d, ...
- C#入门经典第十章例题 - - 卡牌
1.库 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...