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

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

  1、新建一个android项目

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

  2、习惯性地打开项目清单文件AndroidManifest.xml,添加一个权限:<uses-permission android:name="android.permission.VIBRATE"/> 不添加不行的。

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

具体代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  android:orientation="vertical"
  tools:context=".MainActivity" >
    <Button
      android:id="@+id/btn_01"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="3.0以前版本的notification,用新的吧"
      android:onClick="click"
      />
    <Button
      android:id="@+id/btn_02"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="大视图文本通知"
      android:onClick="click"
      />
    <Button
      android:id="@+id/btn_03"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="大视图图片通知"
      android:onClick="click"
      />
    <Button
      android:id="@+id/btn_04"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="进度条通知"
      android:onClick="click"
      />
</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),按住通知左(右)滑动就可以让通知小时了。

效果如下:

(0)

相关推荐

  • Android中关于Notification及NotificationManger的详解

    Android状态栏提醒 在Android中提醒功能也可以用AlertDialog,但是我们要慎重的使用,因为当使用AlertDialog的时候,用户正在进行的操作将会被打断,因为当前焦点被AlertDialog得到.我们可以想像一下,当用户打游戏正爽的时候,这时候来了一条短信.如果这时候短信用AlertDialog提醒,用户必须先去处理这条提醒,从而才能继续游戏.用户可能会活活被气死.而使用Notification就不会带来这些麻烦事,用户完全可以打完游戏再去看这条短信.所以在开发中应根据实际

  • Android界面 NotificationManager使用Bitmap做图标

    今天看到EOE问答里面有这"[Android 界面]NotificationManager 如何使用Bitmap做图标"这样一个问题,在论坛搜索也没有好的案例 特写一个简单的demo供大家参考 今天发布的是NotificationManager 使用Bitmap做图标 关键code 复制代码 代码如下: public void notification(int flag) { Notification notification = new Notification(); //设置sta

  • android notification 的总结分析

    分类 notification有以下几种: 1>普通notification 1.内容标题 2.大图标 3.内容 4.内容附加信息 5.小图标 6.时间 2>大布局Notification 图1 大布局notification是在android4.1以后才增加的,大布局notification与小布局notification只在'7'部分有区别,其它部分都一致.大布局notification只有在所有notification的最上 面时才会显示大布局,其它情况下显示小布局.你也可以用手指将其扩

  • Android编程实现拦截短信并屏蔽系统Notification的方法

    本文实例讲述了Android编程实现拦截短信并屏蔽系统Notification的方法.分享给大家供大家参考,具体如下: 拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限 <uses-permission android:name="android.permission.RECEIVE_SMS"> </uses-permission> <uses-p

  • Android开发 -- 状态栏通知Notification、NotificationManager详解

    本想自己写一个的,但是看到这篇之后,我想还是转过来吧,实在是非常的详细: 在Android系统中,发一个状态栏通知还是很方便的.下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类:  NotificationManager . Notification. NotificationManager :  是状态栏通知的管理类,负责发通知.清楚通知等. NotificationManager 是一个系统Service,必须通过 getSys

  • android使用NotificationListenerService监听通知栏消息

    NotificationListenerService是通过系统调起的服务,在应用发起通知时,系统会将通知的应用,动作和信息回调给NotificationListenerService.但使用之前需要引导用户进行授权.使用NotificationListenerService一般需要下面三个步骤. 注册服务 首先需要在AndroidManifest.xml对service进行注册. <service android:name=".NotificationCollectorService&q

  • Android中通知Notification使用实例(振动、灯光、声音)

    本文实例讲解了通知Notification使用方法,此知识点就是用作通知的显示,包括振动.灯光.声音等效果,分享给大家供大家参考,具体内容如下 效果图: MainActivity: import java.io.File; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; im

  • Android Notification.Builder通知案例分享

    随着Android系统的不断升级,相关Notification的用法有很多种,有的方法可能已经被android抛弃了,下面为大家分享一下个人如何实现Android Notification通知小案例源代码,供大家参考. Android Notification.Builder通知小案例,具体代码示例如下: package com.example.day6ke; import android.app.Notification; import android.app.NotificationMana

  • 详解Android中Notification通知提醒

    在消息通知时,我们经常用到两个组件Toast和Notification.特别是重要的和需要长时间显示的信息,用Notification就最 合适不过了.当有消息通知时,状态栏会显示通知的图标和文字,通过下拉状态栏,就可以看到通知信息了,Android这一创新性的UI组件赢得了用户的一 致好评,就连苹果也开始模仿了.今天我们就结合实例,探讨一下Notification具体的使用方法.  首先说明一下我们需要实现的功能是:在程序启动时,发出一个通知,这个通知在软件运行过程中一直存在,相当于qq的托盘

  • android中创建通知栏Notification代码实例

    ///// 第一步:获取NotificationManager NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); ///// 第二步:定义Notification Intent intent = new Intent(this, OtherActivity.class); //PendingIntent是待执行的Intent PendingIntent pi

随机推荐