Notification和NotificationManager

作者: 咔咔和拉拉 | 来源:发表于2016-12-11 23:38 被阅读509次
    demo.png

    使用Notifaction和NotifactionManager的目的

    Broadcast Receiver组件并没有提供可视化界面来显示广播信息,而Notifaction和NotifactionManager可以实现可视化的信息显示,通过它们可以显示广播信息的内容以及图标和震动等信息(在状态栏上)

    具体步骤:

    1)获得系统级的服务Notification Manager,调用getSystemService()方法实现

    //创建一个NotificationManager的引用
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = (NotificationManager)getSystemService(ns);
    

    2)然后实例化Notification,设置其属性(要显示的)

     //实例化Notification
            n = new Notification();
            //设置显示图标,该图标会在状态状态栏显示
            int icon =n .icon=R.drawable.notification;
            //设置显示提示信息,该信息会在状态栏显示
            String tickerText="Test Notification";
            //显示时间
            long when = System.currentTimeMillis();
            n .icon=icon;
            n .tickerText=tickerText;
            n .when=when;
    

    当然也可以这样写

    Notification n1 = new Notification(icon,tickerText,when);//图片,显示文字,时间
    

    3)通过Notification Manager发出通知

    //实例化intent
                    Intent intent = new Intent(MainActivity.this,MainActivity.class);
                    //获取pendingIntent
                    PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
                    //设置事件信息
                    n.setLatestEventInfo(MainActivity.this, "My Title", "My Content", pi);
                    //发出通知,把Notification传递给 NotificationManager
                    mNotificationManager .notify(ID,n);
    

    取消提醒

    mNotificationManager .cancel(ID);  
    
    demo.png

    使用自定义的 Notification

    要创建一个自定义的Notification,可以使用RemoteViews。要定义自己的扩展消息,首先 要初始化一个RemoteViews对象,然后将它传递给Notification的contentView字段,再把PendingIntent传递给 contentIntent字段。

    1)创建一个自 定义的消息布局。

    <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"
       />
    

    2)在程序代码中使用RemoteViews的方法来定义image和text。然后把RemoteViews对象传到contentView字段

    RemoteViews contentView=new RemoteViews(getPackageName(),R.layout.view);
    
    contentView.setImageViewResource(R.id.image,R.drawable.icon);
    
    contentView.setTextViewText(R.id.text,”Hello,this message is in a custom expanded view”);
    
    notification.contentView = contentView;
    
    

    3)为Notification的contentIntent字段定义一个Intent(注意,使用自定义View不需要 setLatestEventInfo()方法)

    RemoteViews contentView=new RemoteViews(getPackageName(),R.layout.view);
    
    contentView.setImageViewResource(R.id.image,R.drawable.icon);
    
    contentView.setTextViewText(R.id.text,”Hello,this message is in a custom expanded view”);
    
    notification.contentView = contentView;
    
    

    4)发送通知

    mNotificationManager.notify(ID,notification);
    
    
    效果图.png
    大体步骤就是这些,下面是一些属性。
    //初始化 Nofification
    
    Notification notification =new Notification(icon,tickerText,when);
    
    /*
    
    * 添加声音
    
    * notification.defaults |=Notification.DEFAULT_SOUND;
    
    * 或者使用以下几种方式
    
    * notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
    
    * notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
    
    * 如果想要让声音持续重复直到用户对通知做出反应,则可以在notification的flags字段增加"FLAG_INSISTENT"
    
    * 如果notification的defaults字段包括了"DEFAULT_SOUND"属性,则这个属性将覆盖sound字段中定义的声音
    
    */
    
    /*
    
    * 添加振动
    
    * notification.defaults |= Notification.DEFAULT_VIBRATE;
    
    * 或者可以定义自己的振动模式:
    
    * long[] vibrate = {0,100,200,300}; //0毫秒后开始振动,振动100毫秒后停止,再过200毫秒后再次振动300毫秒
    
    * notification.vibrate = vibrate;
    
    * long数组可以定义成想要的任何长度
    
    * 如果notification的defaults字段包括了"DEFAULT_VIBRATE",则这个属性将覆盖vibrate字段中定义的振动
    
    */
    
    /*
    
    * 添加LED灯提醒
    
    * notification.defaults |= Notification.DEFAULT_LIGHTS;
    
    * 或者可以自己的LED提醒模式:
    
    * notification.ledARGB = 0xff00ff00;
    
    * notification.ledOnMS = 300; //亮的时间
    
    * notification.ledOffMS = 1000; //灭的时间
    
    * notification.flags |= Notification.FLAG_SHOW_LIGHTS;
    
    */
    
    /*
    
    * 更多的特征属性
    
    * notification.flags |= FLAG_AUTO_CANCEL; //在通知栏上点击此通知后自动清除此通知
    
    * notification.flags |= FLAG_INSISTENT; //重复发出声音,直到用户响应此通知
    
    * notification.flags |= FLAG_ONGOING_EVENT; //将此通知放到通知栏的"Ongoing"即"正在运行"组中
    
    * notification.flags |= FLAG_NO_CLEAR; //表明在点击了通知栏中的"清除通知"后,此通知不清除,
    
    * //经常与FLAG_ONGOING_EVENT一起使用
    
    * notification.number = 1; //number字段表示此通知代表的当前事件数量,它将覆盖在状态栏图标的顶部
    
    * //如果要使用此字段,必须从1开始
    
    * notification.iconLevel = ; //
    
    */
    

    齐全的demo地址:

    <a>https://github.com/WKaKa/Notifications/tree/master/Notifications1</a>

    相关文章

      网友评论

        本文标题:Notification和NotificationManager

        本文链接:https://www.haomeiwen.com/subject/usapmttx.html