Notification Manager 总结

1、定义notification,可以放在Activity或Service类中

        //NF1:notification 通知

        private Notification mNotification;  

        private NotificationManager mNotificationManager;  

        private final static int NOTIFICATION_ID = 0x0001;  //通知的ID

一、标准Notification

1、设置Notification,可以放在Oncreate函数里

//NF2:设置Notification

        mNotification = new Notification(R.drawable.icon,”This is a notification.”,System.currentTimeMillis());  

        //将使用默认的声音来提醒用户  

        mNotification.defaults = Notification.DEFAULT_SOUND;  

        mNotificationManager = (NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);  

2、显示Notification,放在开始显示时的地方

        //NF3:显示Notification

        Intent mIntent = new Intent(this,BindServiceActivity.class);//BindServiceActivity为点击该通知后要跳转的类

        //这里需要设置Intent.FLAG_ACTIVITY_NEW_TASK属性  

        mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      

        PendingIntent mContentIntent =PendingIntent.getActivity(this,0, mIntent, 0);  

        //这里必需要用setLatestEventInfo(上下文,标题,内容,PendingIntent)不然会报错.  

        mNotification.setLatestEventInfo(this, “10086”, “您的当前话费不足,请充值.哈哈~”, mContentIntent);  

        //这里发送通知(消息ID,通知对象)  

        mNotificationManager.notify(NOTIFICATION_ID, mNotification);  

3、1、2也可以整合成一个函数

    public void showNotification()

    {

   
mNotification = new Notification(R.drawable.icon,”This is a notification.”,System.currentTimeMillis());  

        //将使用默认的声音来提醒用户  

        mNotification.defaults = Notification.DEFAULT_SOUND;  

        

        //NF3:显示Notification,设置通知的事件消息

        Intent mIntent = new Intent(this,BindServiceActivity.class);  //BindServiceActivity为点击该通知后要跳转的Activity

        //这里需要设置Intent.FLAG_ACTIVITY_NEW_TASK属性  

        mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   

        PendingIntent mContentIntent =PendingIntent.getActivity(this,0, mIntent, 0);  

        //这里必需要用setLatestEventInfo(上下文,标题,内容,PendingIntent)不然会报错.  

        mNotification.setLatestEventInfo(this, “我的Notification”, “后台计数服务已启动~”, mContentIntent);  

        //这里发送通知(消息ID,通知对象)  

        //把Notification传递给NotificationManager 

        mNotificationManager = (NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);  

        mNotificationManager.notify(NOTIFICATION_ID, mNotification);  

    }

二、自定义通知视图(指状态栏显示的view自定义)

1、创建一个自定义的消息布局 view.xml 

<?xml version=”1.0″ encoding=”utf-8″?> 

<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” 

android:layout_width=”fill_parent” android:layout_height=”fill_parent”> 

<ImageView android:id=”@+id/image” android:layout_width=”wrap_content” 

android:layout_height=”fill_parent” android:layout_marginRight=”10dp” /> 

<TextView android:id=”@+id/text” android:layout_width=”wrap_content” 

android:layout_height=”fill_parent” android:textColor=”#000″ /> 

</LinearLayout>

2、创建自定义Notification

    public void showNotificationCustom()

    {

   
//NF2:设置Notification

        mNotification = new Notification(R.drawable.icon,”A customized notification.”,System.currentTimeMillis()); 

        //将使用默认的声音来提醒用户  

        mNotification.defaults = Notification.DEFAULT_SOUND;  

        //NF3:加载自定义的view

        RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.view); //创建RemoteViews

        contentView.setImageViewResource(R.id.image, R.drawable.menu_bg); //加载图标

        contentView.setTextViewText(R.id.text, “Hello,this is JC”); //设置文字

        mNotification.contentView = contentView; 

        

        //NF4:显示Notification,设置通知的事件消息

        Intent notificationIntent = new Intent(this,BindServiceActivity.class); 

        PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0); 

        mNotification.contentIntent = contentIntent; 

        //把Notification传递给NotificationManager 

        NotificationManager mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 

        mNotificationManager.notify(0,mNotification);

    }

三、扩展

1、Notification提供了丰富的手机提示方式:

a)在状态栏(Status Bar)显示的通知文本提示,如:

     notification.tickerText = “hello”;

b)发出提示音,如:

     notification.defaults |= Notification.DEFAULT_SOUND;

     notification.sound = Uri.parse(“file:///sdcard/notification/ringer.mp3”);

     notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, “6”);

c)手机振动,如:

     notification.defaults |= Notification.DEFAULT_VIBRATE;

     long[] vibrate = {0,100,200,300};

    notification.vibrate = vibrate;

d)LED灯闪烁,如:

     notification.defaults |= Notification.DEFAULT_LIGHTS;

     notification.ledARGB = 0xff00ff00;

     notification.ledOnMS = 300;

     notification.ledOffMS = 1000;

     notification.flags |= Notification.FLAG_SHOW_LIGHTS;

4)发送通知:

     private static final int ID_NOTIFICATION = 1;

     mNotificationManager.notify(ID_NOTIFICATION, notification);

2. 通知的更新

    如果需要更新一个通知,只需要在设置好notification之后,再调用setLatestEventInfo(),然后重新发送一次通知即可,即再次调用notify()。

3. 自定义通知视图

    这部分可以参考官方文档,讲的很详细了。

    AndroidSDK: docs/guide/topics/ui/notifiers/notifications.html 

    参考文档:

    AndroidSDK1.5 : docs/guide/topics/ui/notifiers/notifications.html

4、只有Activity和Serviece可以开启通知,其他的组件包括广播接收器并不能直接开启。如果需要对系统广播进行消息提示的话,

   则需要在广播接收器中转移到Activity或者Service中,由他们开启通知。


参考文档:http://blog.csdn.net/ddna/article/details/5122083


PS:目前有两个疑问,正在继续探索:

1、如何显示在running中?

答:Bind的Service不能显示在running中,虽验证过,但不能完全确定

2、activity强制关闭后,notification为何还在?

答:原来Service的Ondestroy重载函数里未加:
mNotificationManager.cancel(NOTIFICATION_ID);//销毁通知

    原文作者:雨奇
    原文地址: https://blog.csdn.net/cstarbl/article/details/7200591
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞