热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android中通过Notification&NotificationManager实现消息通知

关于通知Notification相信大家都不陌生了,平时上QQ的时候有消息来了或者有收到了短信,手机顶部就会显示有新消息什么的,就类似这种。今天就稍微记录下几种Notification的用法。3.0以前的通知和3.0以后的通知是有些区别的。

notification是一种让你的应用程序在没有开启情况下或在后台运行警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。

  1、新建一个android项目

    我新建项目的 minSdkVersion="11",targetSdkVersion="19"。也就是支持最低版本的3.0的。

  2、习惯性地打开项目清单文件AndroidManifest.xml,添加一个权限: 不添加不行的。

  3、在布局activity_main.xml中添加几个按钮,样子就大概这样,垂直排版的LinearLayout

具体代码


    

   

4、MainActivity中的代码:

 package com.xin.day__notificationdemo;
  import java.util.Timer;
  import java.util.TimerTask;
  import android.app.Activity;
  import android.app.Notification;
  import android.app.NotificationManager;
  import android.app.PendingIntent;
 import android.content.Intent;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
 import android.support.v.app.NotificationCompat;
 import android.support.v.app.NotificationCompat.BigPictureStyle;
 import android.support.v.app.NotificationCompat.BigTextStyle;
 import android.support.v.app.NotificationCompat.Builder;
 import android.util.Log;
 import android.view.View;
 public class MainActivity extends Activity {
   //通知的唯一标识,在一个应用程序中不同的通知要区别开来
   private static final int NO = x;
   private static final int NO = x;
   private static final int NO = x;
   private static final int NO = x;
   //进度条要用
   private int progress = ;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
   }
   //click方法,和xml文件中的各个按钮的onClick属性的值要一致
   public void click(View view) {
     //创建NotificationManager
     final NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
     //用switch语句控制四个控件
     switch (view.getId()) {
     case R.id.btn_: {
       Notification notification = new Notification();
       notification.icon = R.drawable.ic_launcher;
       notification.tickerText = "有消息了。。。";
       Intent intent = new Intent(this, MainActivity.class);
       PendingIntent pendingIntent = PendingIntent.getActivity(this, ,
           intent, PendingIntent.FLAG_UPDATE_CURRENT);
       notification.setLatestEventInfo(this, ".以前的通知", "试试而已", pendingIntent);
       notification.when = System.currentTimeMillis();
       notification.defaults = Notification.DEFAULT_ALL;
       notification.flags = Notification.FLAG_AUTO_CANCEL;
       notification.number = ;
       notification.vibrate = new long[]{, };
       manager.notify(NO, notification);
     }
     break;
     case R.id.btn_:{
       //大视图文本通知
       //创建消息构造器,在扩展包
       NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
       //设置当有消息是的提示,图标和提示文字
       builder.setSmallIcon(R.drawable.ic_launcher).setTicker("有新消息了");
       //需要样式
       BigTextStyle style = new BigTextStyle();
       style.setBigContentTitle("上课通知");//通知的标题
       style.bigText("今天下午要在综B上jsp");//通知的文本内容
       //大视图文本具体内容
       style.setSummaryText("这是正常的课程安排,请各位同学按时上课");
       builder.setStyle(style);
       //显示消息到达的时间,这里设置当前时间
       builder.setWhen(System.currentTimeMillis());
       //获取一个通知对象
       Notification notification = builder.build();
       notification.flags = Notification.FLAG_AUTO_CANCEL;
       //发送(显示)通知
       //notify()第一个参数id An identifier for this notification unique within your application
       //get?意思说,这个通知在你的应用程序中唯一的标识符
       manager.notify(NO, notification);
     }
     break;
     case R.id.btn_:{
       //大视图图片通知
       NotificationCompat.Builder builderPic = new Builder(this);
       builderPic.setSmallIcon(R.drawable.ic_launcher).setTicker("新浪体育提醒");
       //进行设置
       BigPictureStyle pictureStyle = new BigPictureStyle();
       pictureStyle.setBigContentTitle("新浪体育 快船VS骑士 ");
       pictureStyle.bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.ic_game));
       pictureStyle.setSummaryText(" 快船VS骑士 天王山之战!!!");//不要在意文字
       //设置样式
       builderPic.setStyle(pictureStyle);
       //设置显示的时间
       builderPic.setWhen(System.currentTimeMillis());
       Notification notification = pictureStyle.build();
       notification.flags = Notification.FLAG_AUTO_CANCEL;
       //
       manager.notify(NO, notification);
     }
     break;
     case R.id.btn_:{
       //进度条通知
       final NotificationCompat.Builder builderProgress = new NotificationCompat.Builder(this);
       builderProgress.setSmallIcon(R.drawable.ic_launcher).setTicker("进度条通知");
       builderProgress.setProgress(, progress, false);
       final Notification notification = builderProgress.build();
       //发送一个通知
       manager.notify(NO, notification);
       //创建一个计时器
       Timer timer = new Timer();
       timer.schedule(new TimerTask(){
         @Override
         public void run() {
           Log.i("progress",progress+"");
           while(progress <= ){
             progress ++;
             try {
               Thread.sleep();
             } catch (InterruptedException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
             }
             //更新进度条
             builderProgress.setProgress(, progress, false);
             //再次通知
             manager.notify(NO, builderProgress.build());
           }
           //计时器退出
           this.cancel();
           //进度条退出
           manager.cancel(NO);
           return;//结束方法
         }
       }, );
     }
     break;
     default:
       break;
     }
   }
 }

5、运行:我的虚拟机版本是4.0的(api19),按住通知左(右)滑动就可以让通知小时了。

效果如下:



推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
author-avatar
摩羯水瓶的微博w
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有