Android关于Notification.Builder的使用

来源:互联网 发布:js实现图片3d自动旋转 编辑:程序博客网 时间:2024/05/01 16:50

在android3.0之后,Android的通知与之前的版本有所区别。为了更好的使用,androidSDK引入了Android.app.Notificition.Builder这个类。这样就与之前使用发生了变化。那就说一下在Android3.0之后Notificaition的使用 

public class NotifyTest extends Activity{
    private NotificationManager mgr = null;//通过通知管理器来实现通知操作
    int count = 0; //有时service会发出多条通知,我们用一个计数器来模拟不同的通知
    private static final int NOTIFY_ME_ID=1337; //通知管理器通过通知ID来标识不同的通知,创建和删除通知是需要提供通知号。
    
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notify_test);
 
        //步骤1:在Android进行通知处理,首先需要重系统哪里获得通知管理器NotificationManager,它是一个系统Service。 
        mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    }
   
  
    public void notifyMe(View v){ 
        count ++; //这是通知的序列号,每按一次button,模拟一条新的通知
        //步骤2:创建一个PendingIntent,和Intent类似,不同的是由于不是马上调用,需要在下拉状态条是出发的activity,所以采用的是PendingIntent
        PendingIntent i = PendingIntent.getActivity(this, 0, new Intent(this,NotifyMessage.class), 0);
        //步骤3:通过Notification.Builder来创建通知,注意这是在API Level 11之后才支持,如果要兼容Android 2.x的版本,可以看后面注释内的代码
        Notification myNotify
 = new Notification.Builder(this)
                                .setSmallIcon(R.drawable.note) //设置状态栏中的小图片,尺寸一般建议在24×24,这个图片同样也是在下拉状态栏中所显示,如果在那里需要更换更大的图片,可以使用setLargeIcon(Bitmap icon)
                                .setTicker("Ticker:"+count)//设置在status bar上显示的提示文字
                                .setContentTitle("Title:" + count)//设置在下拉status bar后Activity,本例子中的NotififyMessage的TextView中显示的标题
                                .setContentText("Notification Text" + count)//TextView中显示的详细内容
                                .setContentIntent(i) //关联PendingIntent
                                .setNumber(count) //在TextView的右方显示的数字,可放大图片看,在最右侧。这个number同时也起到一个序列号的左右,如果多个触发多个通知(同一ID),可以指定显示哪一个。
                                .build();
      
         
       myNotify.flags |= Notification.FLAG_AUTO_CANCEL; //FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
        mgr.notify(NOTIFY_ME_ID ,myNotify);//步骤4:通过通知管理器来发起通知。如果id不同,则每click,在status哪里增加一个提示
    }
   
   
    public void notifyClear(View v){ 
        mgr.cancel( NOTIFY_ME_ID );
    }   

}

如果通知还需要硬件方面的提醒,例如振动,可如下处理

note.setVibrate(new long[] {500L, 200L, 200L, 500L})
//note.vibrate=new long[] {500L, 200L, 200L, 500L};

Notification.Builder提供了setLights( ),setSound( )等方法,还有其他很多等等,具体可以根据自己的需求在参考中查找。


import android.annotation.SuppressLint;
import android.app.Activity;import android.app.Notification;
import android.app.Notification.Builder;立即发表
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.content.Intent; import android.content.res.Resources;
 import android.graphics.BitmapFactory;
import android.os.Bundle; import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
@SuppressLint("NewApi")
 public class MainActivity extends Activity 
{
           private Button but1= null;
           private NotificationManager nm =null;
           private PendingIntent contentIntent = null; 
       @Override
      public void onCreate(Bundle savedInstanceState)
      {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                init();
             }
       public void init(){
           but1 =(Button)super.findViewById(R.id.but1);
           but1.setOnClickListener(onclick);
           nm = (NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);
           Intent notificationIntent = new Intent(this,MainActivity.class);
          contentIntent = PendingIntent.getActivity(MainActivity.this, 0, notificationIntent, 0); 
       }
          OnClickListener onclick = new OnClickListener(){
              private final int NOTIFICATION_BASE_NUMBER=110;
              private Builder builder = null;
              private Notification n = null;
              public void onClick(View arg0) {
            switch(arg0.getId()){
            case R.id.but1: NotificationManager nm = (NotificationManager) MainActivity.this                             .getSystemService(NOTIFICATION_SERVICE);
            Resources res = MainActivity.this.getResources();
        builder = new Notification.Builder(MainActivity.this);
        builder.setContentIntent(contentIntent) .
       setSmallIcon(R.drawable.ic_launcher)//设置状态栏里面的图标(小图标)                     .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.i5))//下拉下拉列表里面的图标(大图标)        .setTicker("this is bitch!") //设置状态栏的显示的信息
           .setWhen(System.currentTimeMillis())//设置时间发生时间
           .setAutoCancel(true)//设置可以清除
                      .setContentTitle("This is ContentTitle")//设置下拉列表里的标题
                      .setContentText("this is ContentText");//设置上下文内容
                    n = builder.getNotification();//获取一个Notification
                    n.defaults =Notification.DEFAULT_SOUND;//设置为默认的声音
                    nm.notify(NOTIFICATION_BASE_NUMBER, n);//显示通知 break; } 
                               }
                      };
 }
 Layout.xml文件我就不发出来了,就一个Button。 当按下主界面的Button后会出现会在下拉列表中出现 This is ContentTitle。


原创粉丝点击