您的位置:首页 > 移动开发 > Android开发

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

2016-07-21 19:44 495 查看
在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);

}
});
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: