[翻译]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 ...
随机推荐
- python的MetaClass的代码分析。基于廖雪峰博客代码
# 一张表一个类,表内每一行就是一个实例 ''' 一个单独的元类使用的程序分析. ''' class Field(object): def __init__(self, name, column_ty ...
- 浅谈style.height、clientHeight、offsetHeight、scrollHeight
先分别介绍以下,以下资料来自MDN HTMLElement.offsetHeight 是一个只读属性,它返回该元素的像素高度,高度包含该元素的垂直内边距和边框,且是一个整数. Element.clie ...
- OpenFlow1.3.3 学习记录(持续更新)
OpenFlow1.3.3 学习记录(持续更新) 正在学习OpenFlow1.3,该篇笔记将日常更新,主要内容大致为官方文档的总结与翻译. 交换机组件 按照优先级顺序进行包匹配,如果匹配到流表项,则执 ...
- sql心经
问题: 查数据是一件很痛苦的事,尤其是多张表链接查询更是惨不忍睹 各种条件拼接,各种查询数据不对,看着写了半天的sql,感觉很完美,没毛病啊... 分析: http://blog.jobbole.co ...
- 北京Uber优步司机奖励政策(4月13日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- c++静态变量
静态变量 一.静态变量 static关键字 static int i; 二.静态变量的运用 .计算函数被调用次数 .返回指针 第45课中有这么一段 int* square3(int *x) { int ...
- day 14 元组
1. 使用场景? # 列表list 数据类型相同, #rwx文件 100个人的名字, # 用字典 dict ['dɪkt] 很多信息描述1个人, # tuple [ˈtʌpəl] #只读文件 不能修改 ...
- cogs2223 [SDOI2016 Round1] 生成魔咒
cogs2223 [SDOI2016 Round1] 生成魔咒 原题链接 题解 暴力:每次更新后缀数组??? set+二分+hash暴力 http://paste.ubuntu.com/2549629 ...
- HTML基本代码教学片,认识HTML
今儿头午有点晕晕的感觉,咳咳,甩甩头开课 HTML 定义:超文本标记语言 (记不住的可以这么记:how to make love ! 哈哈,准备开车,粗人一个,长的不行) 其实理解起来很简单,超越文本 ...
- 一个web应用的诞生(2)--使用模板
经过了第一章的内容,已经可以做出一些简单的页面,首先用这种方式做一个登录页面,首先要创建一个login的路由方法: @app.route("/login",methods=[&qu ...