【翻译】(20)状态栏通知
see
http://developer.android.com/guide/topics/ui/notifiers/notifications.html
原文见
http://developer.android.com/guide/topics/ui/notifiers/notifications.html
-------------------------------
Status Bar Notifications
状态栏通知
-------------------------------
Quickview
快速概览
* A status bar notification allows your application to notify the user of an event without interupting their current activity
* 状态栏通知允许你的应用程序通知事件的用户而不打断他们的当前活动
* You can attach an intent to your notification that the system will initiate when the user clicks it
* 你可以依附一个意图到你的通知,系统将在用户点击它时初始化它。
In this document
本文目录
* The Basics 基础
* Managing your Notifications 管理你的Notification
* Creating a Notification 创建一个Notification
* Updating the notification 更新通知
* Adding a sound 添加声音
* Adding vibration 添加振动
* Adding flashing lights 添加闪灯
* More features 更多特性
* Creating a Custom Notification Layout 创建一个自定义通知布局
Key classes
关键类
Notification
NotificationManager
-------------------------------
A status bar notification adds an icon to the system's status bar (with an optional ticker-text message) and a notification message in the notifications window. When the user selects the notification, Android fires an Intent that is defined by the Notification (usually to launch an Activity). You can also configure the notification to alert the user with a sound, a vibration, and flashing lights on the device.
状态栏通知添加一个图标到系统的状态栏(带有一个可选的纸带文本消息)以及在通知窗口中的一个通知消息。当用户选择通知时,Android发送一个被Notification定义的Intent(通常会启动一个Activity)。你还可以配置通知以便使用设备上的声音,振动和闪灯警告用户。
A status bar notification should be used for any case in which a background service needs to alert the user about an event that requires a response. A background service should never launch an activity on its own in order to receive user interaction. The service should instead create a status bar notification that will launch the activity when selected by the user.
状态栏通知应该用于后台Service需要警告用户需响应的事件的任何情况下。后台Service应该从不自己启动一个Activity以接收用户的交互。取而代之,Service应该创建一个状态栏通知,它将在被用户选中时启动Activity。
Figure 1 shows the status bar with a notification icon on the left side.
图1展示左侧带有一个通知图标的状态栏。
(图略:
3:40 PM
)
Figure 1. Status bar with a notification.
图1. 带有一个通知的状态栏。
Figure 2 shows the notification's message in the notifications window.
图2展示在通知窗口中通知的消息。
(图略:
2009年4月25日 下午3:41
Android 清空通知
通知
特拉维斯
你在哪里? 3:39 PM
)
Figure 2. The notifications window.
图2. 通知窗口。
-------------------------------
The Basics
基础
An Activity or Service can initiate a status bar notification. Because an activity can perform actions only while it is running in the foreground and its window has focus, you will usually create status bar notifications from a service. This way, the notification can be created from the background, while the user is using another application or while the device is asleep. To create a notification, you must use two classes: Notification and NotificationManager.
一个Activity或Service可以初始化一个状态栏通知。因为一个活动可以执行动作仅当它正在运行在前台中并且它的窗口拥有焦点,所以通常你将从一个服务中创建状态栏通知。这样的话,通知可以在用户正在使用另一个应用程序或当设备正在休眠的时候,从后台中被创建。为了创建一个通知,你必须使用两个类:Notification和NotificationManager。
Use an instance of the Notification class to define the properties of your status bar notification, such as the status bar icon, the notification message, and extra settings such as a sound to play. The NotificationManager is an Android system service that executes and manages all status bar notifications. You do not instantiate the NotificationManager directly. In order to give it your Notification, you must retrieve a reference to the NotificationManager with getSystemService() and then, when you want to notify the user, pass it your Notification with notify().
使用一个Notification类的实例以定义你的状态栏通知的属性,诸如状态栏图标,通知消息,以及额外设置诸如要播放的声音。NotificationManager是一个Android系统服务,它执行并管理所有状态栏通知。你并不是直接实例化NotificationManager。为了把你的Notification传给它,你必须用getSystemService()获取指向NotificationManager的引用,然后当你希望通知用户时,用notify()把你的Notification对象传给它。
To create a status bar notification:
为了创建一个状态栏通知:
1. Get a reference to the NotificationManager:
1. 获取指向NotificationManager的引用:
-------------------------------
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
-------------------------------
2. Instantiate the Notification:
2. 实例化Notification:
-------------------------------
int icon = R.drawable.notification_icon;
CharSequence tickerText = "Hello";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
-------------------------------
3. Define the notification's message and PendingIntent:
3. 定义通知的消息和PendingIntent:
-------------------------------
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
-------------------------------
4. Pass the Notification to the NotificationManager:
4. 传递Notification给NotificationManager:
-------------------------------
private static final int HELLO_ID = 1;
mNotificationManager.notify(HELLO_ID, notification);
-------------------------------
That's it. Your user has now been notified.
就这样。你的用户现在已经被通知了。
-------------------------------
Managing your Notifications
管理你的Notification
The NotificationManager is a system service that manages all notifications. You must retrieve a reference to it with the getSystemService() method. For example:
NotificationManager是一个管理所有通知的系统服务。你必须用getSystemService()获取指向它的引用。例如:
-------------------------------
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
-------------------------------
When you want to deliver your status bar notification, pass the Notification to the NotificationManager with notify(int, Notification). The first parameter is the unique ID for the notification and the second is the Notification object. The ID uniquely identifies the notification from within your application. The ID is necessary if you need to update the notification or (if your application manages different kinds of notifications) select the appropriate action when the user returns to your application via the intent defined in the notification.
当你希望传送你的状态栏通知时,用notify(int, Notification)传递Notification给NotificationManager。第一参数是通知的唯一ID而第二参数是Notification对象。ID在你的应用程序中唯一地标识通知。ID是必需的,如果你需要更新通知或者(如果你的应用程序管理不同类型的通知)在用户通过定义在通知内的意图返回到你的应用程序时,选择合适的动作。
To clear the status bar notification when the user selects it from the notifications window, add the "FLAG_AUTO_CANCEL" flag to your Notification. You can also clear it manually with cancel(int), passing it the notification ID, or clear all your notifications with cancelAll().
为了在用户从通知窗口中选择它时清空该状态栏通知,添加FLAG_AUTO_CANCEL标志到你的Notification对象。你还可以用cancel(int)手动清空它,把通知ID传给它,或者用cancelAll()清空你的所有通知。
-------------------------------
Creating a Notification
创建一个Notification
A Notification object defines the details of the notification message that is displayed in the status bar and notifications window, and any other alert settings, such as sounds and blinking lights.
一个Notification对象定义显示在状态栏和通知窗口中的通知消息的细节,以及其它任意警告设置,诸如声音和闪灯。
A status bar notification requires all of the following:
状态栏通知需要以下所有东西:
* An icon for the status bar
* 一个用于状态栏的图标
* A title and message, unless you define a custom notification layout
* 标题和消息,除非你定义一个自定义通知布局
* A PendingIntent, to be fired when the notification is selected
* 一个PendingIntent,在通知被选中时发送
Optional settings for the status bar notification include:
状态栏通知的可选设置包括:
* A ticker-text message for the status bar
* 用于状态栏的纸带文本消息
* An alert sound
* 警告声音
* A vibrate setting
* 振动设置
* A flashing LED setting
* 闪烁LED设置
The starter-kit for a new notification includes the Notification(int, CharSequence, long) constructor and the setLatestEventInfo(Context, CharSequence, CharSequence, PendingIntent) method. These define all the required settings for a notification. The following snippet demonstrates a basic notification setup:
用于创建新通知的初级(注:启动器?)工具箱包含Notification(int, CharSequence, long)构造函数以及setLatestEventInfo(Context, CharSequence, CharSequence, PendingIntent)方法。这些方法定义一个通知的所有所需的设置。以下代码片段演示一个基本通知配置:
-------------------------------
int icon = R.drawable.notification_icon; // icon from resources 来自资源的图标
CharSequence tickerText = "Hello"; // ticker-text 纸带文本
long when = System.currentTimeMillis(); // notification time 通知时间
Context context = getApplicationContext(); // application Context 应用程序Context
CharSequence contentTitle = "My notification"; // message title 消息标题
CharSequence contentText = "Hello World!"; // message text 消息文本
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
// the next two lines initialize the Notification, using the configurations above
// 下面两行代码用上面的配置初始化Notification
Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
-------------------------------
Updating the notification
更新通知
You can update the information in your status bar notification as events continue to occur in your application. For example, when a new SMS text message arrives before previous messages have been read, the Messaging application updates the existing notification to display the total number of new messages received. This practice of updating an existing notification is much better than adding new notifications, because it avoids clutter in the notifications window.
你可以跟随继续发生在你的应用程序内的事件而更新你的状态栏通知的信息。例如,当一个新的SMS(注:短信服务)文本消息在前一个消息被阅读之前到达时,消息应用程序更新现存通知以显示接收新消息的总数。这条更新现存Notification的实践(注:经验)要远优于添加新的通知,因为避免了通知窗口内的杂乱。
Because each notification is uniquely identified by the NotificationManager with an integer ID, you can revise the notification by calling setLatestEventInfo() with new values, change some field values of the notification, and then call notify() again.
因为每个通知被NotificationManager用一个整型ID唯一标识,所以你可以通过用新的值调用setLatestEventInfo()来修正通知,改变通知的一些域的值,然后再次调用notify()。
You can revise each property with the object member fields (except for the Context and the notification title and text). You should always revise the text message when you update the notification by calling setLatestEventInfo() with new values for contentTitle and contentText. Then call notify() to update the notification. (Of course, if you've created a custom notification layout, then updating these title and text values has no effect.)
你可以用对象的成员域来修正每个属性(除Context和通知标题和文本以外)。你应该总是在你更新通知时修正文本消息,通过用contentTitle和contentText的新值调用setLatestEventInfo()。(当然,如果你已经创建好一个自定义的通知布局,那么更新这些标题和文本值会没有任何效果。)
Adding a sound
添加声音
You can alert the user with the default notification sound (which is defined by the user) or with a sound specified by your application.
你可以用默认的通知声音(由用户定义)或者用你的应用程序指定的声音警告用户。
To use the user's default sound, add "DEFAULT_SOUND" to the defaults field:
为了使用用户的默认声音,添加DEFAULT_SOUND到defaults域
-------------------------------
notification.defaults |= Notification.DEFAULT_SOUND;
-------------------------------
To use a different sound with your notifications, pass a Uri reference to the sound field. The following example uses a known audio file saved to the device SD card:
为了随你的通知使用不同的声音,传递一个Uri引用到sound域。以下示例使用保存在设备SD卡中的一个已知音频文件。
-------------------------------
notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
-------------------------------
In the next example, the audio file is chosen from the internal MediaStore's ContentProvider:
在以下示例中,音频文件从内部MediaStore的ContentProvider中选择。
-------------------------------
notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
-------------------------------
In this case, the exact ID of the media file ("6") is known and appended to the content Uri. If you don't know the exact ID, you must query all the media available in the MediaStore with a ContentResolver. See the Content Providers documentation for more information on using a ContentResolver.
在这种情况下,媒体文件的精确ID(“6”)是已知的并且被尾加到内容Uri。如果你不知道精确ID,那么你必须用一个ContentResolver查询MediaStore中的所有可用媒体。参见内容提供者文档以获取关于使用ContentResolver的更多信息。
If you want the sound to continuously repeat until the user responds to the notification or the notification is cancelled, add FLAG_INSISTENT to the flags field.
如果你希望声音持续地重复直至用户响应通知或通知被取消,添加FLAG_INSISTENT到flags域。
-------------------------------
Note: If the defaults field includes DEFAULT_SOUND, then the default sound overrides any sound defined by the sound field.
注意:如果defaults域包含DEFAULT_SOUND,那么默认声音覆盖被sound域定义的任意声音。
-------------------------------
Adding vibration
添加振动
You can alert the user with the the default vibration pattern or with a vibration pattern defined by your application.
你可以用默认的振动模式或用一个被你的应用程序定义的振动模式警告用户。
To use the default pattern, add DEFAULT_VIBRATE to the defaults field:
为了使用默认模式,添加DEFAULT_VIBRATE到defaults域:
-------------------------------
notification.defaults |= Notification.DEFAULT_VIBRATE;
-------------------------------
To define your own vibration pattern, pass an array of long values to the vibrate field:
为了定义你自己的振动模式,传递一个long型数组值到vibrate域:
-------------------------------
long[] vibrate = {0,100,200,300};
notification.vibrate = vibrate;
-------------------------------
The long array defines the alternating pattern for the length of vibration off and on (in milliseconds). The first value is how long to wait (off) before beginning, the second value is the length of the first vibration, the third is the next length off, and so on. The pattern can be as long as you like, but it can't be set to repeat.
long型数组定义振动关与开长度(以毫秒为单位)的交替模式。最开始的值是从开始算起等待(关闭)的时长,第二个值是第一次振动的长度,第三个值是下一个关闭的长度,如此类推。该模式可以如你喜欢地长,但它不能被设置为重复。
-------------------------------
Note: If the defaults field includes DEFAULT_VIBRATE, then the default vibration overrides any vibration defined by the vibrate field.
注意:如果defaults域包含DEFAULT_VIBRATE,那么默认的振动覆盖任意被vibrate域定义的振动。
-------------------------------
Adding flashing lights
添加闪灯
To alert the user by flashing LED lights, you can implement the default light pattern (if available), or define your own color and pattern for the lights.
为了用闪烁的LED灯警告用户,你可以实现默认的灯光模式(如果可用),或者定义你自己的颜色和模式用于灯光。
To use the default light setting, add DEFAULT_LIGHTS to the defaults field:
为了使用默认的灯光设置,添加DEFAULT_LIGHTS到defaults域:
-------------------------------
notification.defaults |= Notification.DEFAULT_LIGHTS;
-------------------------------
To define your own color and pattern, define a value for the ledARGB field (for the color), the ledOffMS field (length of time, in milliseconds, to keep the light off), the ledOnMS (length of time, in milliseconds, to keep the light on), and also add FLAG_SHOW_LIGHTS to the flags field:
为了定义你自己的颜色和模式,为ledARGB域(对于颜色),ledOffMS域(时间长度,以毫秒为单位,以保持灯光关闭),ledOnMS域(时间长度,以毫秒为单位,以保持灯光开启)定义一个值,并且还要添加FLAG_SHOW_LIGHTS到flags域:
-------------------------------
notification.ledARGB = 0xff00ff00;
notification.ledOnMS = 300;
notification.ledOffMS = 1000;
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
-------------------------------
In this example, the green light repeatedly flashes on for 300 milliseconds and turns off for one second. Not every color in the spectrum is supported by the device LEDs, and not every device supports the same colors, so the hardware estimates to the best of its ability. Green is the most common notification color.
在这个示例中,绿灯重复地持续闪烁300毫秒并关闭一秒。在光谱中不是每种颜色都被设备的LED支持,也不是所有设备支持相同的颜色,所以硬件会评估它的最佳能力。绿色是最一般的通知颜色。
More features
更多特性
You can add several more features to your notifications using Notification fields and flags. Some useful features include the following:
你可以使用Notification的域和标志添加更多的几个特性到你的通知。几个有用的特性包括如下:
* FLAG_AUTO_CANCEL flag
* FLAG_AUTO_CANCEL标志
Add this to the flags field to automatically cancel the notification after it is selected from the notifications window.
添加它到flags域以自动地在它从通知窗口中被选择时取消通知。
* FLAG_INSISTENT flag
* FLAG_INSISTENT标志
Add this to the flags field to repeat the audio until the user responds.
添加它到flags域以重复音频直至用户响应。
* FLAG_ONGOING_EVENT flag
* FLAG_ONGOING_EVENT标志
Add this to the flags field to group the notification under the "Ongoing" title in the notifications window. This indicates that the application is on-going — its processes are still running in the background, even when the application is not visible (such as with music or a phone call).
添加它到flags域以分组通知到通知窗口中的“正在执行”标题下。它指示应用程序正在执行——它的进程仍然运行在后台中,即便当应用程序不可见(诸如正在播放音乐或进行打电话)。
* FLAG_NO_CLEAR flag
* FLAG_NO_CLEAR标志
Add this to the flags field to indicate that the notification should not be cleared by the "Clear notifications" button. This is particularly useful if your notification is on-going.
添加它到flags域以指示通知不应该被“清空通知”按钮清空。它特别有用,如果你的通知正在执行。
* number field
* number域
This value indicates the current number of events represented by the notification. The appropriate number is overlaid on top of the status bar icon. If you intend to use this field, then you must start with "1" when the Notification is first created. (If you change the value from zero to anything greater during an update, the number is not shown.)
这个值指示由通知代表的事件的当前数量。合适的数量被叠加在状态栏图标的上方。如果你打算使用这个域,那么你必须在Notification最先被创建时必须从1开始。(如果在一次更新期间你从0开始改变该值到任意的更大值时,数字不会显示。)
* iconLevel field
* iconLevel域
This value indicates the current level of a LevelListDrawable that is used for the notification icon. You can animate the icon in the status bar by changing this value to correlate with the drawable's defined in a LevelListDrawable. See the LevelListDrawable reference for more information.
这个值指示一个用于通知图标的LevelListDrawable的当前级别。你可以通过改变这个值以关联到定义在LevelListDrawable中定义的可绘画对象的值,使该图标在状态栏中动画化。参见LevelListDrawable的参考文档以获取更多信息。
See the Notification class reference for more information about additional features that you can customize for your application.
参见Notification类参考文档以获取更多关于你可以为你的应用程序自定义的附加特性的信息。
-------------------------------
Creating a Custom Notification Layout
创建一个自定义通知布局
(图略:
2011年9月16日 3:53
Android 清空
通知
自定义通知
这是一个自定义布局
)
Figure 3. Notification with a custom layout.
图3. 带有自定义布局的通知。
By default, the notification that appears in the notifications window includes a title and the message text. These are defined by the contentTitle and contentText parameters of the setLatestEventInfo() method. However, you can also define a custom layout for the notification using RemoteViews. Figure 3 shows an example of a custom notification layout. It looks similar to the default notification, but is actually created with a custom XML layout.
默认,用在通知窗口中的通知包含一个标题和消息文本。这些东西由setLatestEventInfo()方法的contentTitle和contentText参数定义。然而,你还可以用RemoteViews为展开视图定义一个自定义布局。图3展示一个自定义通知布局的示例,它看上去类似于默认的通知,但实际上是用一个自定义的XML布局创建。
To define your own layout for the notification, instantiate a RemoteViews object that inflates a custom layout file, then pass the RemoteViews to the contentView field of your Notification.
为了为通知定义你自己的布局,实例化一个解压自定义布局文件的RemoteViews对象,然后传递RemoteViews给你的Notification的contentView域。
Creating a custom notification layout is best understood with an example:
用一个示例来更好地理解如何创建一个自定义通知布局。
1. Create the XML layout for the notification. For example, the following layout is called custom_notification.xml:
1. 创建通知的XML布局。例如,创建下面被称为custom_notification_layout.xml的布局:
-------------------------------
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp" >
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp" />
<TextView android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
style="@style/NotificationTitle" />
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/title"
style="@style/NotificationText" />
</RelativeLayout>
-------------------------------
Notice that the two TextView elements include the style attribute. It's important that you use style resources for the text in your custom notifications, because the background color of the notification can vary across different devices and platform versions. Beginning with Android 2.3 (API level 9), the system defines a style for the text it uses for the default notification layouts. Thus, you should apply that style when running on Android 2.3 or higher to ensure that your text is visible against the background.
注意两个TextView元素包含style属性。它对于你对你的自定义通知的文本使用风格资源很重要,因为通知的背景色可能在不同设备和平台版本之间有差异。从Android 2.3(API级别9)开始,系统定义一个文本样式,它被用于默认的通知布局。这样,当运行于Android 2.3或更高版本上时你应该应用那个样式以确保你的文本对比背景而言是可见的。
For example, to use the standard text colors on versions of Android lower than 2.3, you should use the following styles for res/values/styles.xml:
例如,为了在低于2.3的Android版本上使用标准文本颜色,你应该使用以下res/values/styles.xml的样式:
-------------------------------
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="NotificationText">
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="NotificationTitle">
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textStyle">bold</item>
</style>
<!-- If you want a slightly different color for some text,
consider using ?android:attr/textColorSecondary -->
<!-- 如果你希望一些文本的颜色稍微不同,
请考虑使用?android:attr/textColorSecondary -->
</resources>
-------------------------------
Then, to apply the system's default colors for notifications on Android 2.3 and higher, use the following styles for res/values-v9/styles.xml:
然后,对于Android 2.3和更高的通知应用系统的默认颜色,对res/values-v9/styles.xml使用以下样式:
-------------------------------
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="NotificationText" parent="android:TextAppearance.StatusBar.EventContent" />
<style name="NotificationTitle" parent="android:TextAppearance.StatusBar.EventContent.Title" />
</resources>
-------------------------------
Now, when running on Android 2.3 (API level 9) or higher, the text in your custom view will use the same colors that the system does for default notifications. This is important because later versions of Android actually change the background color of the notifications to be dark. Inheriting the system's styles ensures that your text will be light in such cases, but also if the background is some other unexpected color, your text will also change as appropriate.
现在,当运行于Android 2.3(API级别9)或更高时,你的自定义视图中的文本将使用与系统提供给默认通知的相同颜色。这很重要,因为较新版本的Android实际上把通知的背景色修改为变暗。继承系统的样式确保你的文本将在这种情况下被加亮,但同时如果背景是一些其它非预期的颜色,那么你的文本将同样在合适的时候改变。
2. Now, in the application code, use the RemoveViews methods to define the image and text. Then pass the RemoteViews object to the contentView field of the Notification, as shown in this example:
2. 现在,在应用程序代码中,使用RemoveViews的方法定义图片和文本。然后传递RemoteViews对象到Notification的contentView域,正如这个示例所示:
-------------------------------
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image, R.drawable.notification_image);
contentView.setTextViewText(R.id.title, "Custom notification");
contentView.setTextViewText(R.id.text, "This is a custom layout");
notification.contentView = contentView;
-------------------------------
As shown here, pass the application's package name and the layout resource ID to the RemoteViews constructor. Then, define the content for the ImageView and TextView, using the setImageViewResource() and setTextViewText(). In each case, pass the reference ID of the appropriate View object that you want to set, along with the value for that View. Finally, the RemoteViews object is passed to the Notification in the contentView field.
正如这里所示,传递应用程序的包名和布局资源ID到RemoteViews构造函数。然后,使用setImageViewResource()和setTextViewText(),定义ImageView和TextView的内容。在每种情况下,传递你希望设置的合适View对象的引用ID,以及用于那个View的值。最后,RemoteViews对象被传递给contentView域中的Notification。
3. Because you don't need the setLatestEventInfo() method when using a custom view, you must define the Intent for the Notification with the contentIntent field, as in this example:
3. 因为当使用一个自定义视图时你不需要setLatestEventInfo()方法,所以你必须用contentIntent域为Notification定义Intent,正如这个示例所示:
-------------------------------
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.contentIntent = contentIntent;
-------------------------------
4. The notification can now be sent as usual:
4. 现在通知可以像平常那样被发送:
-------------------------------
mNotificationManager.notify(CUSTOM_VIEW_ID, notification);
-------------------------------
The RemoteViews class also includes methods that you can use to easily add a Chronometer or ProgressBar in your notification's layout. For more information about creating custom layouts for your notification, refer to the RemoteViews class reference.
RemoteViews类还包含一些方法,你可以用它们轻易地在你的通知布局中添加一个Chronometer或ProgressBar。想获取关于用RemoteViews创建自定视图的更多信息,请参考RemoteViews类的参考文档。
-------------------------------
Caution: When creating a custom notification layout, you must take special care to ensure that your custom layout functions properly in different device orientations and resolutions. While this advice applies to all View layouts created on Android, it is especially important in this case because your layout real estate is very restricted. So don't make your custom layout too complex and be sure to test it in various configurations.
警告:当创建一个自定义通知布局时,你必须特别小心地确保你的自定义布局功能(注:函数?)在不同的设备方向和分辨率下是正确的。当这个建议应用被创建在Android上的所有View布局时,它在这种情况下特别地重要,因为你的布局真正的空间是非常有限的。所以不要让你的自定义布局太复杂并确保在不同的配置中测试它。
-------------------------------
Except as noted, this content is licensed under Apache 2.0. For details and restrictions, see the Content License.
除特别说明外,本文在Apache 2.0下许可。细节和限制请参考内容许可证。
Android 4.0 r1 - 09 Dec 2011 11:54
-------------------------------
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
(此页部分内容基于Android开源项目,以及使用根据创作公共2.5来源许可证描述的条款进行修改)