Android深入浅出之了解 Notification(通知栏)~

在Android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等。

下面就来说说经常会使用到通知机制中的通知栏框架(Notificaiton),它适用于交互事件的通知。它是位于顶层可以展开的通知列表。它会时不时的提醒你什么软件该更新了,什么人发你微信消息了等。

(网上看了下,全面介绍的文章不多,所以就萌生了写这篇的念头,随便当作回顾笔记。下面我就通过官方文档、源代码、书上的一些资料汇总下这一块的知识,并通过一个通知栏的汇总DEMO让大家更好的了解这个类的使用,内容有点多,可以根据需求看目录学习)。


Notificaiton状态通知栏:


功能作用


1.显示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信)  
2.显示客户端的推送消息(如有新版本发布,广告,推荐新闻等) 
3.显示正在进行的事物(例如:后台运行的程序)(如音乐播放器、版本更新时候的下载进度等)


思维导图结构


思维导图的大体结构(按照各个节点延伸拓展学习)

Notificaiton -- service   -- BroadcastReceiver  -- Intent(flag、Action等属性应用) --  PendingIntent

感慨:

一个Notificaiton通知的拓展使用就要涉及与4大组建的配合,所以学好整体的知识体系。

联系:

1.由于service 是在后台运行,所以它意图做什么我们看不到,可以通过Notificaiton 来显示提醒(如音乐的后台播放)。

2.service服务和BroadcastReceiver广播相结合,在加上Notificaiton 显示(如程序的后台更新)。

3.Intent作为意图处理,和Notificaiton的点击时间紧密结合在了一起,并且与BroadcastReceiver和service的联系也紧密不可以分割

service 在后台之后通过BroadcastReceiver来通知Notificaiton 显示相关东西,在通过Intent完成用户的意图操作




代码实现:

package com.example.user.android2lesson14_notification;

import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RemoteViews;

public class MainActivity extends AppCompatActivity {
    private Button defaultstyle;
    private  Button cancelButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        defaultstyle= (Button) findViewById(R.id.default_style);
        defaultstyle.setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
            @Override
            public void onClick(View view) {

               首先需要一个manger
                NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
               创建一个builder用于设置通知属性
                Notification.Builder builder=new Notification.Builder(MainActivity.this);

               设置builder的属性
               设置大图标·
                Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
                builder.setLargeIcon(bitmap);
               设置消息来时的提示
                builder.setTicker("baby,来消息了~");
                设置通知标题
                builder.setContentTitle("麒麟集团通知");
               设置通知内容
                builder.setContentText("今夜我们一起看星星,男生888,女士88,望周知!!");
                设置小图标
                builder.setSmallIcon(R.mipmap.ic_launcher);
                builder.setAutoCancel(true);
                Intent intent=new Intent(MainActivity.this,SecondActivity.class);
               第一个参数:传一个上下文对象
               第二个参数:传一个返回的状态码
               第三个参数:一个Intent,通常就是跳转的Intent
                第四个参数:是通知的更新类型
                PendingIntent pendingIntent= PendingIntent.getActivity(MainActivity.this,100,intent,PendingIntent.FLAG_UPDATE_CURRENT);
                builder.setContentIntent(pendingIntent);
                设置自定义通知~~~~~下午讲
//                1.创建remoteView对象
                RemoteViews views=new RemoteViews(getPackageName(),R.layout.notification_layout);
//                2.设置remoteView对象的属性
                views.setTextViewText(R.id.title,"喜马拉雅");
                views.setTextViewText(R.id.text,"姑娘你是条汉子");

               设置自定义通知的点击响应事件
                创建一个pendingIntent
                Intent intent1=new Intent(MainActivity.this,SecondActivity.class);
                PendingIntent pendingIntent1=PendingIntent.getActivity(MainActivity.this,100,intent1,PendingIntent.FLAG_CANCEL_CURRENT);
              设置并关联响应事件
                views.setOnClickPendingIntent(R.id.BtnInfo,pendingIntent1);
                builder.setContent(views);/ 根据builder创建notification
                Notification notification=builder.build();

                利用manger将通知显示出来
                manager.notify(100,notification);
                manager.notify(101,notification);
            }
        });
        cancelButton= (Button) findViewById(R.id.cancel_action);
        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                1.拿到通知manger
                NotificationManager manger= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
              2.取消所有通知
                manger.cancelAll();
               取消指定的通知,根据id号来确定对象
                 manger.cancel(100);

            }
        });
    }
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值