【Android 开发】:通知之 Status Bar Notifications
2013-09-02 22:09
232 查看
在上一讲中,我们讲解了 Toast Notifications 通知的使用,这一讲我们来讲一下通知的另外一种使用方式:状态栏的通知的使用方式。在我们学习的四大组件当中,Activity, Service, Broadcast 都可以去触发一个通知。
1.
查看一下Notifications api文档,这一讲我们主要来学习一下 Status Bar Notifications 通知的使用
状态栏通知会在手机的系统通知栏里面添加一个图标(或者可选的一条ticker-text(短暂的信息))。它用户选择了通知,系统会触发一个Notification定义(通常是在Activity中发出)的Intent来指定动作。你可以通过定义一个声音,震动或者设备的闪光灯来通知用户。
状态栏的通知主要是用在后台的service中,它会提示用户对一个事件的到来进行响应。后台的服务不会去加载一个Activity来得到焦点从而获得用户的交互,它应该是以创建一个状态栏通知的形式让用户去选择从而进入相应Activity。这是比较一种友好的交互方式。
【注意】:1. 状态栏通知允许通知用户事件,当不会打断当前Activity的运行
2. 你可以在通知里面设置Intent,允许用户点击通知来触发进入某种动作。
Notification 是用来创建通知,使用 Notification 的实例来定义状态栏通知的属性,比如状态栏通知图标,通知消息和一些额外的设置,如播放声音等。
NotificationManager是用来管理通知. 它是Android的服务,所以会执行和管理所有状态栏的通知,你不需要直接实例化NotificationManager,可以通过getSystemService()方法来得到一个NotificationManager的引用,如果你想通知用户,调用Notification 的 notify()方法
2). 状态栏通知需要一下几个设置
1. 状态栏图标
2. 状态栏标题和信息,除非是自定义的通知布局
3. PendingIntent,是为了当用户选择通知时所触发的事件
3). 查看 Notification 类,我们需要使用 Notification.Builder 来构造一个通知
4). 【设置自定义布局】:使用自定义的通知必须使用 RemoteViews 来加载自定义的布局
2) 自定义布局 custom_notification.xml
【注意】以上程序运行环境最低在 Android Level 16以上,所以这里使用模拟器来实现以上功能。
详情参考:http://developer.android.com/guide/topics/ui/notifiers/notifications.html
1.
Status Bar Notifications 介绍
查看一下Notifications api文档,这一讲我们主要来学习一下 Status Bar Notifications 通知的使用状态栏通知会在手机的系统通知栏里面添加一个图标(或者可选的一条ticker-text(短暂的信息))。它用户选择了通知,系统会触发一个Notification定义(通常是在Activity中发出)的Intent来指定动作。你可以通过定义一个声音,震动或者设备的闪光灯来通知用户。
状态栏的通知主要是用在后台的service中,它会提示用户对一个事件的到来进行响应。后台的服务不会去加载一个Activity来得到焦点从而获得用户的交互,它应该是以创建一个状态栏通知的形式让用户去选择从而进入相应Activity。这是比较一种友好的交互方式。
【注意】:1. 状态栏通知允许通知用户事件,当不会打断当前Activity的运行
2. 你可以在通知里面设置Intent,允许用户点击通知来触发进入某种动作。
2. 基本的使用方法
1). Activity 和 Service 都能发布一个状态栏的通知,因为Activity都是在前端并且获取用户焦点的,通常的做法是在从Service创建状态栏通知,然后在Activity中显示通知。创建一个通知,必须使用到 Nofifaction 和 NotificationManager 。Notification 是用来创建通知,使用 Notification 的实例来定义状态栏通知的属性,比如状态栏通知图标,通知消息和一些额外的设置,如播放声音等。
NotificationManager是用来管理通知. 它是Android的服务,所以会执行和管理所有状态栏的通知,你不需要直接实例化NotificationManager,可以通过getSystemService()方法来得到一个NotificationManager的引用,如果你想通知用户,调用Notification 的 notify()方法
2). 状态栏通知需要一下几个设置
1. 状态栏图标
2. 状态栏标题和信息,除非是自定义的通知布局
3. PendingIntent,是为了当用户选择通知时所触发的事件
3). 查看 Notification 类,我们需要使用 Notification.Builder 来构造一个通知
4). 【设置自定义布局】:使用自定义的通知必须使用 RemoteViews 来加载自定义的布局
3. 代码实现
1) 布局文件 activity_main.xml 主要是定义了两个Button,用来显示状态栏通知和显示状态栏自定义通知,这里就不贴出来了。2) 自定义布局 custom_notification.xml
<?xml version="1.0" encoding="utf-8"?> <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" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/title" android:layout_toRightOf="@id/image" /> </RelativeLayout>3) 主程序文件 MainActivity.java
package com.android.notificationdemo; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RemoteViews; public class MainActivity extends Activity { private Button button, button2; private NotificationManager manager; // 查看 NotificationCompat.Builder 类,这个类里面可以设置通知的一些属性,如图标,信息等。 private Notification.Builder builder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initComponent(); // 创建一个通知的引用 manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); builder = new Notification.Builder(MainActivity.this); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 这个表示通知是在当前这个Activitiy来活动的。 Intent intent = new Intent(MainActivity.this, MainActivity.class); /* * PendingIntent.getActivity的参数依次为:Context,发送者的请求码(可以填0), * 用于系统发送的Intent,标志位。 */ PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0); builder.setContentIntent(contentIntent); builder.setContentTitle("new notification"); builder.setContentText("Hello AHuier!"); builder.setSmallIcon(R.drawable.ic_launcher); /* * builder.setDefaults(Notification.DEFAULT_ALL); setDefaluts * 设置系统的默认的一些值,这些值在 Notification 类中 DEFAULT_ALL : 默认全部 * DEFAULT_LIGHTS : 默认的闪光灯 DEFAULT_SOUND : 默认的声音 DEFAULT_VIBRATE * : 默认的震动 [注意]:要去调用默认震动,需要在AndroidManifest.xml文件中定义授权 * android:permission.VIBRATE. */ /* * 获取SDcar卡的音乐作为铃声,提示用户可以自定义设置铃声 Uri uri = * Uri.parse("file:///mnt/sdcard/xxx.mp3"); * builder.setSound(uri); 在低版本中要这样设置 * notification.defaults=Notification.DEFAULT_SOUND; */ // setTicker 第一次发布时候会短暂的显示提示内容。 builder.setTicker("There is a Notification"); Notification notification = builder.build(); // 仅仅限于在高版本4.1中使用 // 1000是id号,表示通知的唯一标示符,后面会根据这个通知来进行更新 manager.notify(1000, notification); } }); button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { RemoteViews contentViews = new RemoteViews(getPackageName(), R.layout.custom_notification); contentViews.setImageViewResource(R.id.image, R.drawable.ic_launcher); contentViews.setTextViewText(R.id.title, "自定义通知的标题"); contentViews.setTextViewText(R.id.text, "自定义通知的内容"); Intent intent = new Intent(MainActivity.this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0); builder.setContentIntent(pendingIntent); //加载指定的自定义布局 builder.setContent(contentViews); Notification notification = builder.build(); manager.notify(1001, notification); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private void initComponent() { button = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); } }
4. 程序运行结果
【注意】以上程序运行环境最低在 Android Level 16以上,所以这里使用模拟器来实现以上功能。
详情参考:http://developer.android.com/guide/topics/ui/notifiers/notifications.html
相关文章推荐
- Android开发指南(38) —— Status Bar Notifications
- Android开发指南(38) —— Status Bar Notifications(翻译)
- Android设计和开发系列第一篇:Notifications通知(Design)
- 使用Google Cloud Messaging (GCM),PHP 开发Android Push Notifications (安卓推送通知)
- Android设计和开发系列第一篇:Notifications通知(Develop—Training)
- 通知栏提示 Status Bar Notifications
- Android设计和开发系列第一篇:Notifications通知(Develop—API Guides)
- Android使用fitsSystemWindows属性实现–状态栏【status_bar】各版本适配方案
- Android开发 Lollipop通知栏图片显示异常的原因及处理
- 麦子学院android开发笔记:Android更换RatingBar图片
- Android开发:Translucent System Bar 的最佳实践------Android性能分析工具整理汇总
- android开发视频监控时,抓拍图片存储在相册,图片无法显示问题?通知相册更新即可
- Android Notifications通知
- Android xmpp开发 asmack获取离线在线添加好友消息 及 好友上线下线通知
- Android UI开发详解之ActionBar
- Android开发通知栏Notification详解
- 【Android UI设计与开发】第10期:顶部标题栏(一)ActionBar详细概述和简单示例
- Android开发本地及网络Mp3音乐播放器(十九)通知媒体库更新刚下载的MP3
- android开发training之actionbar之3
- 关于Android开发BottomNavigationBar的初次使用。。。。