Status Notification是作用是在页眉的位置,提示用户某一项操作已完成或者请求用户交互,当用户选择并点击后,会启动相应的操作。比如Service的下载任务完成,可以用此方法提醒用户;还有比如未接电话提示等等。
后台的Service不应该为了得到用户的交互去启动一项Activity,而应该生成一个Status Notification,当用户选择点击后,这个Status Notification去启动Activity。
一个Status Notification包含Status Bar和Notification Message两部分。
Activity和Service都可以初始化一个Status Notification。但是由于Activity只能处于前端且获得焦点才能执行动作,所以总是在Service中生成Status Notification。这样,Notification就可以在后台生成,比如用户在运行其他应用或者设备睡眠的时候。
生成Notification,需要用到两个类:Notification和NotificationManager。
package com.test.statusnotificationdemo;
import android.os.Bundle;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onStart()
{
// TODO Auto-generated method stub
super.onStart();
//创建NotificationManager,这里并不是用New方法
//创建的mNotificationManager对象负责"发出"和"取消"notification
NotificationManager mNotificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
//这里是设置notification的bar,三个参数分别是在bar上显示的图标、信息、时间
Notification notification=new Notification(R.drawable.ic_launcher, "Hello", System.currentTimeMillis());
//PendingIntent是一个封装好的Intent,它并不立即执行,而且等待事件来触发
//Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁
//getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
Context context=getApplicationContext();
CharSequence contextTitle="My notification";
CharSequence contextText="Hello World!";
Intent notificationIntent=new Intent(this,NotificaitionActivity.class);
//PendingIntent 为Intent的包装,这里是启动Intent的描述,PendingIntent.getActivity 返回的PendingIntent表示,此PendingIntent实例中的Intent是用于启动 Activity 的Intent。
PendingIntent contentIntent=PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contextTitle, contextText, contentIntent);//四个参数分别为:所在的Activity或application、详细信息Title、详细信息内容Text、相应的Intent
//用mNotificationManager发出notification
int HELLO_ID=1;//用于notification的标识
mNotificationManager.notify(HELLO_ID, notification);
}
}