`

Status Notification

 
阅读更多

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);
		
	}
    

    
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics