Notification介绍

来源:互联网 发布:linux 最小安装 编辑:程序博客网 时间:2024/05/16 19:04
Notification是显示在手机状态栏的信息——手机状态栏位于手机屏幕的最上方,那里一般显示手机当前的网络状态、电池状态、时间等,Notification所代表的是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notificaton。下面介绍如何实现:

(一)创建notification,与其相关的两个类:

(1)Notification(icon,tickerText, when)

  • Icon是图标,一般放在drawable

  •  tickerText是图标后面的内容,如:“Missed call from5554”

  • when显示图标什么时候创建的,如可以采用:System.currentTimeMillis()

    创建了notification后紧接着调用notification.setLatestEventInfo设置事件信息

    notification.setLatestEventInfo(context,contentTitle,contentText,contentIntent)

  •   context:一般是this指向当前对象
  •  contentTitle:相当于标题,即图中蓝色笔画的内容即Missedcalls
  • contentText:消息,即里面的内容,如图中的2missed calls

  • contentIntent是PendingIntent对象,所以下面要创建PendingIntent的对象。

    创建PendingIntent对象:

    PendingIntentcontentIntent=PendingIntent.getActivity(context,requestode,intent,flags)

  • context:this
  •  requestode:0
  •  intent:创建一个intent对象,即当用户点击该notification时,运行哪一个Activity
  • flags:FLAG_CANCEL_CURRENT如果PendingIntent已经存在,在生成一个新的之前,当前的被取消

           FLAG_NO_CREATE如果不存在PendingIntent,仅仅返回空而不会创建PendingIntent对象

          FLAG_UPDATE_CURRENT如果PendingIntent已经存在,先保持,可以被新的代替

    这里创建Intent对象就不多说了,比较简单

    (2)NotificationManager:将创建好的Notification在状态栏显示出来

    这个对象创建采用getSystemService(NOTIFICATION_SERVICE)实现的,然后采用

     manager.notify(id,notification)实现notification的发送。其中id可以定义为静态量,主要是用于标识用的,比如后面的notification的取消可以通过id寻找要取消的notification

    下面介绍下程序的实现:

    (1)创建一个类是继承IntentService的

    package com.syz.statusbar;import android.app.IntentService;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Intent;import android.util.Log;public class StatusService extends IntentService {private static final String TAG = "StatusService";public StatusService() {super("StatusService");// TODO Auto-generated constructor stub}@Overrideprotected void onHandleIntent(Intent intent) {Log.i(TAG, "onHandleIntent:开始下载....");getnotification(false);                //主要用于模拟下载,开始传递是false,实现显                                                //示“下载中...”10秒后再传递true实现显示“下载完成”try {Thread.sleep(10000);getnotification(true);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private void getnotification(boolean f) {Notification notification =new Notification(R.drawable.ic_launcher, "开始下载", System.currentTimeMillis());Intent intent=new Intent(this, MainActivity.class);PendingIntent contentIntent=PendingIntent.getActivity(this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);if(!f)                                     {notification.setLatestEventInfo(this, "下载", "下载中。。。。", contentIntent);}else{notification.setLatestEventInfo(this, "结束", "下载完成", contentIntent);}NotificationManager manager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);manager.notify(R.menu.activity_main, notification);}}

    (2)创建一个Activity

    package com.syz.statusbar;import android.os.Bundle;import android.app.Activity;import android.app.NotificationManager;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button StartService=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);StartService=(Button)findViewById(R.id.StartService);StartService.setOnClickListener(listener);}private OnClickListener listener=new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent();intent.setClass(MainActivity.this, StatusService.class);startService(intent);}};@Overrideprotected void onStart() {super.onStart();NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);//用于当点击notification时,调用指定的Activitymanager.cancel(R.menu.activity_main);                                             //同时取消notification}}
原创粉丝点击