关闭

Android之Notification的多种用法

标签: Notification
265人阅读 评论(0) 收藏 举报
分类:

1.实现的功能

默认通知(已经废弃)
默认通知(API 11以后可用)
默认通知(API 16以后可用)
自定义通知
清除通知

2.主要代码

package demo.xzy.qh.com.notificationdemo;

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.Button;
import android.widget.RemoteViews;

/**
 * 通知的用法
 */
public class MainActivity extends Activity implements View.OnClickListener {
    private static final int NOTIFICATION_FLAG = 1;
    private Button mButton1, mButton2, mButton3, mButton4, mButton5;

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

    private void initView() {
        mButton1 = (Button) findViewById(R.id.btn1);
        mButton2 = (Button) findViewById(R.id.btn2);
        mButton3 = (Button) findViewById(R.id.btn3);
        mButton4 = (Button) findViewById(R.id.btn4);
        mButton5 = (Button) findViewById(R.id.btn5);
    }

    private void initListener() {
        mButton1.setOnClickListener(this);
        mButton2.setOnClickListener(this);
        mButton3.setOnClickListener(this);
        mButton4.setOnClickListener(this);
        mButton5.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        /**
         * 在Android进行通知处理,首先需要从系统那里获得通知管理器NotificationManager,它是一个系统Service
         * */
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        switch (v.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.mipmap.ic_launcher;
                notify1.tickerText = "TickerText:您有新短消息,请注意查收!";
                notify1.when = System.currentTimeMillis();
                /**
                 * compileSdkVersion <=22时可用,compileSdkVersion>=23时此方法被remove
                 * */
                notify1.setLatestEventInfo(this, "Notification Title",
                        "This is the notification message", pendingIntent);
                /**
                 *设置右下角角标数字
                 * */
                notify1.number = 1;
                /**
                 * FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
                 * */
                notify1.flags |= Notification.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)
                        /**
                         * 设置状态栏中的小图片,尺寸一般建议在24×24,这个图片同样也是在下拉状态栏中所显示,
                         * 如果在那里需要更换更大的图片,可以使用setLargeIcon(Bitmap/icon)
                         * */
                        .setSmallIcon(R.mipmap.ic_launcher)
                        /**
                         * 设置在statusbar上显示的提示文字
                         *
                         * **/
                        .setTicker("TickerText:" + "您有新短消息,请注意查收!")//
                        /**
                         *
                         * 设置在下拉statusbar后Activity,本例子中的NotififyMessage的TextView中显示的标题
                         * */
                        .setContentTitle("Notification Title")
                        /**
                         * TextView中显示的详细内容
                         * */
                        .setContentText("This is the notification message")
                        /**
                         * 关联PendingIntent
                         * */
                        .setContentIntent(pendingIntent2)
                        /**
                         * 在TextView的右方显示的数字,可放大图片看,在最右侧。
                         * 这个number同时也起到一个序列号的作用,如果多个触发多个通知(同一ID),可以指定显示哪一个。
                         * */
                        .setNumber(1)
                        /**
                         * 需要注意build()是在API level
                         * 16级之后增加的,在API11中可以使用getNotificatin()来代替
                         * **/
                        .getNotification();
                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.mipmap.ic_launcher)
                        .setTicker("TickerText:" + "您有新短消息,请注意查收!")
                        .setContentTitle("Notification Title")
                        .setContentText("This is the notification message")
                        /**
                         * 需要注意build()是在API level16及之后增加的,API11可以使用getNotificatin()来替代
                         * **/
                        .setContentIntent(pendingIntent3).setNumber(1).build();
                /**
                 * FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
                 * **/
                notify3.flags |= Notification.FLAG_AUTO_CANCEL;
                /**
                 * 步骤4:通过通知管理器来发起通知。如果id不同,则每click,在status状态栏那里增加一个提示
                 * **/
                manager.notify(NOTIFICATION_FLAG, notify3);
                break;

            /**
             * 自定义通知
             * **/
            case R.id.btn4:
                /**
                 *
                 * Notification myNotify = new Notification(R.drawable.message,
                 * "自定义通知:您有新短信息了,请注意查收!", System.currentTimeMillis());
                 * **/
                Notification myNotify = new Notification();
                myNotify.icon = R.mipmap.ic_launcher;
                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, PendingIntent.FLAG_ONE_SHOT);
                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;

        }

    }
}

其中主布局中为线性布局,包含5个按钮,自定义通知的布局仅为测试使用,也比较简单,为线性布局中包含一个TextView
自定义通知布局为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>

3.参考

参考博文http://blog.csdn.net/loongggdroid/article/details/17616509
并修正和完善了部分注释,使得阅读起来更加流畅。


2
0
查看评论

Android Notification的多种用法

简介的讲解,可以跳转链接:http://blog.csdn.net/loongggdroid/article/details/17616509
  • feather_wch
  • feather_wch
  • 2016-04-26 23:54
  • 200

Android之Notification的多种用法

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

Android通知之Notification的多种用法

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

[置顶] Android之Notification的多种用法

分类:   android编程笔记(46)  版权声明:本文为博主原创文章,未经博主允许不得转载。        我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是...
  • puhaibo_skynet
  • puhaibo_skynet
  • 2016-06-24 20:44
  • 161

Android Notification的多种用法

我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的。        我们也知道Android系统也...
  • u011630575
  • u011630575
  • 2015-12-23 22:55
  • 386

(4.1.13)Android之Notification的多种用法

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

[转载]Android之Notification的多种用法

Android之Notification的多种用法
  • w15516001300
  • w15516001300
  • 2017-08-08 11:46
  • 92

(转)Android之Notification的多种用法

原地址:http://blog.csdn.net/loongggdroid/article/details/17616509/ 我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notifica...
  • duyiqun
  • duyiqun
  • 2016-04-09 10:25
  • 165

Android Notification 的四种使用方式

实现通知步骤 一搬实现通知需要如下步骤: 1.获取 NotificationManager 实例管理通知; 2.实例 Notification 对象; 3.管理事件 Intent; 4.发送通知。
  • yxncl
  • yxncl
  • 2017-05-29 11:13
  • 2138

Android Notification 通知 简单使用

人不应该一直怀念过去,要活在当下,所以我现在讲的这个Notification 的使用是在API16及以上的环境的,不兼容低版本步骤开始:1.我们先创建一个Notification ,看下面代码可以看出是使用的建造者模式,顺便给它设置三个基本属性,注意,没这三个基本属性它是活不了的Notificat...
  • heyangweng
  • heyangweng
  • 2017-05-06 00:17
  • 2649
    个人资料
    • 访问:630819次
    • 积分:9610
    • 等级:
    • 排名:第2206名
    • 原创:318篇
    • 转载:125篇
    • 译文:0篇
    • 评论:75条
    个人联系方式
    加入我的QQ群
    文章分类
    最新评论