zoukankan      html  css  js  c++  java
  • 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);//销毁通知

  • 相关阅读:
    leetcode Reverse Words in a String
    leetcode[150] Evaluate Reverse Polish Notation
    leetcode Max Points on a Line
    leetcode Sort List
    leetcode Insertion Sort List
    vs 中一些快捷键
    leetcode LRU Cache
    leetcode[145] Binary Tree Postorder Traversal
    leetcode Binary Tree Preorder Traversal
    Leetcode Reorder List
  • 原文地址:https://www.cnblogs.com/clarence/p/3571886.html
Copyright © 2011-2022 走看看