Android之Notification的多种用法实例

我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的。

我们也知道Android系统也是在不断升级的,有关Notification的用法也就有很多种,有的方法已经被android抛弃了,现在我实现了三种不同的方法,并适应不同的android版本。现在我就把代码公布出来,我喜欢把解释写在代码中,在这里我就不多说了,

先看效果图:

再看代码,主要的代码如下:

package net.loonggg.notification; 

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.RemoteViews; 

public class MainActivity extends Activity {
  private static final int NOTIFICATION_FLAG = 1; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  } 

  public void notificationMethod(View view) {
    // 在Android进行通知处理,首先需要重系统哪里获得通知管理器NotificationManager,它是一个系统Service。
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    switch (view.getId()) {
    // 默认通知
    case R.id.btn1:
      // 创建一个PendingIntent,和Intent类似,不同的是由于不是马上调用,需要在下拉状态条出发的activity,所以采用的是PendingIntent,即点击Notification跳转启动到哪个Activity
      PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
          new Intent(this, MainActivity.class), 0);
      // 下面需兼容Android 2.x版本是的处理方式
      // Notification notify1 = new Notification(R.drawable.message,
      // "TickerText:" + "您有新短消息,请注意查收!", System.currentTimeMillis());
      Notification notify1 = new Notification();
      notify1.icon = R.drawable.message;
      notify1.tickerText = "TickerText:您有新短消息,请注意查收!";
      notify1.when = System.currentTimeMillis();
      notify1.setLatestEventInfo(this, "Notification Title",
          "This is the notification message", pendingIntent);
      notify1.number = 1;
      notify1.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
      // 通过通知管理器来发起通知。如果id不同,则每click,在statu那里增加一个提示
      manager.notify(NOTIFICATION_FLAG, notify1);
      break;
    // 默认通知 API11及之后可用
    case R.id.btn2:
      PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 0,
          new Intent(this, MainActivity.class), 0);
      // 通过Notification.Builder来创建通知,注意API Level
      // API11之后才支持
      Notification notify2 = new Notification.Builder(this)
          .setSmallIcon(R.drawable.message) // 设置状态栏中的小图片,尺寸一般建议在24×24,这个图片同样也是在下拉状态栏中所显示,如果在那里需要更换更大的图片,可以使用setLargeIcon(Bitmap
                            // icon)
          .setTicker("TickerText:" + "您有新短消息,请注意查收!")// 设置在status
                                // bar上显示的提示文字
          .setContentTitle("Notification Title")// 设置在下拉status
                              // bar后Activity,本例子中的NotififyMessage的TextView中显示的标题
          .setContentText("This is the notification message")// TextView中显示的详细内容
          .setContentIntent(pendingIntent2) // 关联PendingIntent
          .setNumber(1) // 在TextView的右方显示的数字,可放大图片看,在最右侧。这个number同时也起到一个序列号的左右,如果多个触发多个通知(同一ID),可以指定显示哪一个。
          .getNotification(); // 需要注意build()是在API level
      // 16及之后增加的,在API11中可以使用getNotificatin()来代替
      notify2.flags |= Notification.FLAG_AUTO_CANCEL;
      manager.notify(NOTIFICATION_FLAG, notify2);
      break;
    // 默认通知 API16及之后可用
    case R.id.btn3:
      PendingIntent pendingIntent3 = PendingIntent.getActivity(this, 0,
          new Intent(this, MainActivity.class), 0);
      // 通过Notification.Builder来创建通知,注意API Level
      // API16之后才支持
      Notification notify3 = new Notification.Builder(this)
          .setSmallIcon(R.drawable.message)
          .setTicker("TickerText:" + "您有新短消息,请注意查收!")
          .setContentTitle("Notification Title")
          .setContentText("This is the notification message")
          .setContentIntent(pendingIntent3).setNumber(1).build(); // 需要注意build()是在API
                                      // level16及之后增加的,API11可以使用getNotificatin()来替代
      notify3.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
      manager.notify(NOTIFICATION_FLAG, notify3);// 步骤4:通过通知管理器来发起通知。如果id不同,则每click,在status哪里增加一个提示
      break;
    // 自定义通知
    case R.id.btn4:
      // Notification myNotify = new Notification(R.drawable.message,
      // "自定义通知:您有新短信息了,请注意查收!", System.currentTimeMillis());
      Notification myNotify = new Notification();
      myNotify.icon = R.drawable.message;
      myNotify.tickerText = "TickerText:您有新短消息,请注意查收!";
      myNotify.when = System.currentTimeMillis();
      myNotify.flags = Notification.FLAG_NO_CLEAR;// 不能够自动清除
      RemoteViews rv = new RemoteViews(getPackageName(),
          R.layout.my_notification);
      rv.setTextViewText(R.id.text_content, "hello wrold!");
      myNotify.contentView = rv;
      Intent intent = new Intent(Intent.ACTION_MAIN);
      PendingIntent contentIntent = PendingIntent.getActivity(this, 1,
          intent, 1);
      myNotify.contentIntent = contentIntent;
      manager.notify(NOTIFICATION_FLAG, myNotify);
      break;
    case R.id.btn5:
      // 清除id为NOTIFICATION_FLAG的通知
      manager.cancel(NOTIFICATION_FLAG);
      // 清除所有的通知
      // manager.cancelAll();
      break;
    default:
      break;
    }
  }
}

再看主布局文件:

<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:orientation="vertical"
  tools:context=".MainActivity" > 

  <Button
    android:id="@+id/btn1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="notificationMethod"
    android:text="默认通知(已被抛弃,但是通用)" /> 

  <Button
    android:id="@+id/btn2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="notificationMethod"
    android:text="默认通知(API11之后可用)" /> 

  <Button
    android:id="@+id/btn3"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="notificationMethod"
    android:text="默认通知(API16之后可用)" /> 

  <Button
    android:id="@+id/btn4"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="notificationMethod"
    android:text="自定义通知" /> 

  <Button
    android:id="@+id/btn5"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="notificationMethod"
    android:text="清除通知" /> 

</LinearLayout>

还有一个是:自定义通知的布局文件my_notification.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="#ffffff"
  android:orientation="vertical" > 

  <TextView
    android:id="@+id/text_content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp" /> 

</LinearLayout>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android开发入门之Notification用法分析

    本文实例讲述了Android中Notification用法.分享给大家供大家参考,具体如下: Notification可以理解为通知的意思一般用来显示广播信息 用Notification就必须要用到NotificationManager 想用Notification一般有三个步骤,如下所示 ① 一般获得系统级的服务NotificationManager. 调用Context.getSystemService(NOTIFICATION_SERVICE)方法即可返回NotificationManag

  • Android中Notification的用法汇总

    我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的. 我们也知道Android系统也是在不断升级的,有关Notification的用法也就有很多种,有的方法已经被android抛弃了,现在我实现了三种不同的方法,并适应不同的android版本.现在我就把代码公布出来,我喜欢把解释写在代码中,在这里我就不多说了,先看效果图: 再看代码,主要的代码如下: pac

  • Android 推送原理(Android Push Notification)详解

    Android 推送原理 由于最近项目中涉及到了Android推送,所以看了一些关于android推送方面的东西,总结到后面我们知道android推送的实现可以归结为3种: 1.POLL,拉.大致思路为向服务器定时的发送请求,然后自己让服务器返回信息. 优点:实现简单. 缺点:实时性差.如果定时间隔小连接数又多,对服务器会有高压力要求.据说还会费电--不知道是不是真的. 2.SMS,彩信方式.据说是拦截彩信,并解析内容.这个还没有动手实践过. 优点:实现简单.实时性也好. 缺点:SMS服务的成本

  • Android开发之Notification通知用法详解

    本文实例讲述了Android开发之Notification通知用法.分享给大家供大家参考,具体如下: 根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onStop函数(按退出键除外)里面把notification放在通知栏里,再此显示时,把notification从通知栏里去掉.或者,只要程序在运行就一直显示通知栏图标. 下面对Notification类中的一些常量,字段,方法简单介绍一下: 常量: DEFAULT_ALL 使用所

  • Android使用Notification实现宽视图通知栏(二)

    Notification是在你的应用常规界面之外展示的消息.当app让系统发送一个消息的时候,消息首先以图表的形式显示在通知栏.要查看消息的详情需要进入通知抽屉(notificationdrawer)中查看.通知栏和通知抽屉(notificationdrawer)都是系统层面控制的,你可以随时查看,不限制于app. Notification 的设计: 作为android UI中很重要的组成部分,notification拥有专属于自己的设计准则. Notification的界面元素在通知抽屉中的n

  • Android使用Notification实现普通通知栏(一)

    Notification是在你的应用常规界面之外展示的消息.当app让系统发送一个消息的时候,消息首先以图表的形式显示在通知栏.要查看消息的详情需要进入通知抽屉(notificationdrawer)中查看.(notificationdrawer)都是系统层面控制的,你可以随时查看,不限制于app. Notification的设计: 作为android UI中很重要的组成部分,notification拥有专属于自己的设计准则. Notification的界面元素在通知抽屉中的notificati

  • Android种使用Notification实现通知管理以及自定义通知栏实例(示例四)

    示例一:实现通知栏管理 当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的.例如我们手机的短信系统,当不断有新消息传来时,我们的通知栏仅仅是更改传来短信的数目,而不是对每条短信单独做一个通知栏用于提示. 修改通知 可以设置一条通知,当然可以更新一条通知,我们通过在调用NotificationManager.notify(ID, notification)时所使用的ID来更新它.为了更新你之前发布的通知,你需要更新或者创建

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

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

  • 详解Android中使用Notification实现进度通知栏(示例三)

    我们在使用APP的过程中,软件会偶尔提示我们进行版本更新,我们点击确认更新后,会在通知栏显示下载更新进度(已知长度的进度条)以及安装情况(不确定进度条),这就是我们今天要实现的功能.实现效果如下: 在代码实现功能前,我们先解释进度条的两种状态: (1)显示一个已知长度的进度条指示器(Displaying a fixed-duration progress indicator) 为了能够显示一个确定的进度条,通过调用setProgress() setProgress(max, progress,

  • Android编程自定义Notification实例分析

    本文实例讲述了Android编程自定义Notification的用法.分享给大家供大家参考,具体如下: Notification是一种让你的应用程序在不使用Activity的情况下警示用户,Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径. 作为UI部分,Notification对移动设备来说是最适合不过的了.用户可能随时都带着手机在身边.一般来说,用户会在后台打开几个程序,但不会注意它们.在这样的情形下,当发生需要注意的事件时,能够通知用户是很重要的. Noti

随机推荐