Android中通知的使用-----Notification详解

Notification(状态栏通知)详解 Android通知机制详解:从基础到进阶 摘要:本文全面介绍Android开发中的Notification机制,包括其核心原理、实现步骤和常见应用场景。文章首先解释Notification的基本概念和工作流程,重点说明NotificationManager、NotificationChannel和PendingIntent等关键组件的作用。随后提供详细实现指南,涵盖权限配置、渠道创建、通知构建和发送等步骤,并附有完整的代码示例(包括manifest配置、布局文件和Activity实现)。文章还针对Andro 阅读详情

        

            Notification —— 通知,是一种让你的应用程序在不使用Activity的情况下警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。 Notification 是由NotificationManager(系统服务)统一管理的。

 

         一般来说, 一个Notification应该传送的消息包括:

                 1 、一个状态条图标        

                 2、在拉伸的状态栏窗口中显示额外的信息和启动一个Application的Intent 

                 3、闪灯或LED

                 4、电话震动 

 

         在状态栏(Status Bar)中,通知主要有两类(使用FLAG_标记,后面讲解到):

 

                 1、正在运行的事件

                 2、通知事件 

 

     Notification图解如下:

 

                                                           

             

 Notification类介绍:

         常量:

              //表示发送一个Notification的所携带的效果

             DEFAULT_ALL              使用默认字段

             DEFAULT_LIGHTS       默认闪光

             DEFAULT_SOUND      默认声音(uri,指向路径)

             DEFAULT_VIRATE       默认震动,后来得知需要添加震动权限VIBRATE: android.permission.VIBRATE

 

          PS:以上的效果常量可以累加,即通过mNotifaction.defaults |=DEFAULT_SOUND   (有些效果只能在真机上才有,比如震动)

            //设置Flag位

            FLAG_AUTO_CANCEL           该通知能被状态栏的清除按钮给清除掉

            FLAG_NO_CLEAR                  该通知不能被状态栏的清除按钮给清除掉

            FLAG_ONGOING_EVENT      通知放置在正在运行

 

    常用字段  

           contentView                  通知在状态栏的显示View(自定义,具体请看下文) ,常与contentIntent配合使用,点击该通知后,

                                          即触发contentIntent

           contentIntent                 设置PendingIntent对象,点击该通知时发送该Intent

           flags                                  设置flag位,例如FLAG_NO_CLEAR等

           defaults                             添加效果

           tickerText                        显示在状态栏中的文字

           when                               发送此通知的时间戳

           icon                                  设置图标

 

    常用方法介绍:

       void setLatestEventInfo(Context context , CharSequence contentTitle,CharSequence  contentText,PendingIntent contentIntent)   

           

        功能: 显示在拉伸状态栏中的Notification属性,点击后将发送PendingIntent对象。

        参数: context             上下文环境

                      contentTitle      状态栏中的大标题

                      contentText      状态栏中的小标题

                      contentIntent    点击后将发送PendingIntent对象

 

        另外的就是Notification的几步不同构造方法了,其构造方法的参数含义如上,请参考SDK 。

 

    注意,关于通知(Notification)的显示类型有两种:

 

                第一种:使用默认的形式(效果图如上显示)。具体使用是为Notification对象设置setLatestEventInfo()方法(该方法内部创建

                           了默认的RemoteViews对象,因此为默认显示),否则程序会报异常 ;

 

                     第二种:   使用自定义的View(RemoteViews对象)显示(功能更加自由,强大),具体方法为设置Notification对象的

                         contentView 属性和contentIntent属性 ,此时不需要设置setLatestEventInfo()方法。具体使用方法如下:

		Notification noti = new Notification(icon, title, when + 10000);
		noti.flags = Notification.FLAG_INSISTENT;
		// 1、创建一个自定义的消息布局 notification.xml
		// 2、在程序代码中使用RemoteViews的方法来定义image和text。然后把RemoteViews对象传到contentView字段
		RemoteViews remoteView = new RemoteViews(this.getPackageName(),R.layout.notification);
		remoteView.setImageViewResource(R.id.image, R.drawable.icon);
		remoteView.setTextViewText(R.id.text , "Hello,this message is in a custom expanded view");
		noti.contentView = remoteView;
		// 3、为Notification的contentIntent字段定义一个Intent(注意,使用自定义View不需要setLatestEventInfo()方法)
       
		//这儿点击后简答启动Settings模块
		PendingIntent contentIntent = PendingIntent.getActivity
		                 (MainActivity.this, 0,new Intent("android.settings.SETTINGS"), 0);
		noti.contentIntent = contentIntent;


 

  本文采用的RemoteViews资源文件如下:/layout/notification.xml

             

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal" android:layout_width="fill_parent"
	android:layout_height="fill_parent">

	<ImageView android:id="@+id/image" android:layout_width="wrap_content"
		android:layout_height="fill_parent" />

	<TextView android:id="@+id/text" android:layout_width="wrap_content"
	    android:layout_toRightOf="@+id/image"
		android:layout_height="wrap_content" android:textColor="#000" />
		
	<ProgressBar android:id="@+id/progress_horizontal"
		style="?android:attr/progressBarStyleHorizontal" 
		android:layout_below="@+id/text"
		android:layout_toRightOf="@+id/image"
		android:layout_width="fill_parent" android:layout_height="wrap_content"
		android:max="100" android:progress="50" android:secondaryProgress="75" />


</RelativeLayout> 

 

 效果图如下:

                                        

 

 

前面我们说过,NotificationManager是所有Notification的大管家,它的主要职责是加入/移除Notification。

  NotificationManager类

   通过获取系统服务来获取该对象:

      NotificationManager mNotificationManager = (NotificationManager)getSystemServic(Context.NOTIFICATION_SERVICE) ;

 

  常用方法:

        public  void cancelAll()                  移除所有通知         (只是针对当前Context下的Notification)

        public  void cancel(int id)              移除标记为id的通知 (只是针对当前Context下的所有Notification)

        public  void notify(String tag ,int id, Notification notification)              将通知加入状态栏, 标签为tag,标记为id

        public  void notify(int id, Notification notification)                                 将通知加入状态栏,,标记为id

 

Demo如下:

               说明: 示例Demo演示了创建两种不同类型的Notification , 实现起来也是很简单的。其实说到两种不同类型的使用

                 方式 ,其实内部原理是差不多的。

                PS : 自定义Notification复用了文章之前的布局文件,请知晓。

 

package com.feixun.qin;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore.Audio;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RemoteViews;
import android.widget.RemoteViews.RemoteView;

public class MainActivity extends Activity {

	private Button sendNotiBt;
	private int count = 0;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		sendNotiBt = (Button) findViewById(R.id.sendNotiBt);
		sendNotiBt.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				showDefaultNotification();
			}
		});
	}

	//自定义显示的通知 ,创建RemoteView对象
	private void showCustomizeNotification() {

		CharSequence title = "i am new";
		int icon = R.drawable.icon;
		long when = System.currentTimeMillis();
		Notification noti = new Notification(icon, title, when + 10000);
		noti.flags = Notification.FLAG_INSISTENT;
		
		// 1、创建一个自定义的消息布局 view.xml
		// 2、在程序代码中使用RemoteViews的方法来定义image和text。然后把RemoteViews对象传到contentView字段
		RemoteViews remoteView = new RemoteViews(this.getPackageName(),R.layout.notification);
		remoteView.setImageViewResource(R.id.image, R.drawable.icon);
		remoteView.setTextViewText(R.id.text , "通知类型为:自定义View");
		noti.contentView = remoteView;
		// 3、为Notification的contentIntent字段定义一个Intent(注意,使用自定义View不需要setLatestEventInfo()方法)
       
		//这儿点击后简单启动Settings模块
		PendingIntent contentIntent = PendingIntent.getActivity
		                 (MainActivity.this, 0,new Intent("android.settings.SETTINGS"), 0);
		noti.contentIntent = contentIntent;
	
		NotificationManager mnotiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		mnotiManager.notify(0, noti);

	}

	// 默认显示的的Notification
	private void showDefaultNotification() {
	    // 定义Notication的各种属性
	     CharSequence title = "i am new";
	    int icon = R.drawable.icon;
	    long when = System.currentTimeMillis();
	    Notification noti = new Notification(icon, title, when + 10000);
	    noti.flags = Notification.FLAG_INSISTENT;

	    // 创建一个通知
	    Notification mNotification = new Notification();

	    // 设置属性值
	    mNotification.icon = R.drawable.icon;
	    mNotification.tickerText = "NotificationTest";
	    mNotification.when = System.currentTimeMillis(); // 立即发生此通知

	    // 带参数的构造函数,属性值如上
	    // Notification mNotification = = new Notification(R.drawable.icon,"NotificationTest", System.currentTimeMillis()));

	    // 添加声音效果
	    mNotification.defaults |= Notification.DEFAULT_SOUND;

	    // 添加震动,后来得知需要添加震动权限 : Virbate Permission
	    //mNotification.defaults |= Notification.DEFAULT_VIBRATE ; 

	    //添加状态标志 

	    //FLAG_AUTO_CANCEL          该通知能被状态栏的清除按钮给清除掉
	    //FLAG_NO_CLEAR                 该通知能被状态栏的清除按钮给清除掉
	    //FLAG_ONGOING_EVENT      通知放置在正在运行
	    //FLAG_INSISTENT                通知的音乐效果一直播放
	    mNotification.flags = Notification.FLAG_INSISTENT ;

	    //将该通知显示为默认View
	    PendingIntent contentIntent = PendingIntent.getActivity
                           (MainActivity.this, 0,new Intent("android.settings.SETTINGS"), 0);
	    mNotification.setLatestEventInfo(MainActivity.this, "通知类型:默认View", "一般般哟。。。。",contentIntent);
	    
	    // 设置setLatestEventInfo方法,如果不设置会App报错异常
	    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
	    
	    //注册此通知 
	    // 如果该NOTIFICATION_ID的通知已存在,会显示最新通知的相关信息 ,比如tickerText 等
	    mNotificationManager.notify(2, mNotification);

	}
	
    private void removeNotification()
	{
	    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
	    // 取消的只是当前Context的Notification
	    mNotificationManager.cancel(2);
	}	
 }

		
		
		
		
		
		

 

 

Android 之 Notification (状态栏通知)详解 本节带来的是Android中用于在状态栏显示通知信息的控件:Notification,相信大部分 学Android都对他都很熟悉,而网上很多关于Notification的使用教程都是基于2.x的,而 现在普遍的Android设备基本都在4.x以上,甚至是5.0以上的都有;.setSound(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.biaobiao)) //设置自定义的提示音。//取消Notification。 阅读详情

相关推荐

Android的通知(Notification)使用详解

这篇博客讲解一下在Android中使用Notification提示消息给用户,Notification是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。在本篇博客中,将介绍Notification的常规使用,以及自定义方式的使用,对于每种不同的方式,都提供示例展示效果。 Notification   Notification

得之我幸--失之我命 2785

Android通知Notification使用全解析,看这篇就够了

通知是 Android 在您的应用 UI 之外显示的消息,用于向用户提供提醒、来自其他人的通信或来自您的应用的其他及时信息。用户可以点击通知打开您的应用或直接从通知中执行操作。本文将带领实现各种常见的通知功能,以及各个Android版本需要做的。 发起一个普通通知的几个要素:重要通知,优先级设置最高,会直接显示在屏幕内(前台),而不是只有通知抽屉里,所以一定要设置,不要引起用户的负面情绪。 这里有几个新增的配置:可以通过在通知上添加一个自定义操作,如上图:去看看。可以通过打开一个Activity,也可以是

yechaoa 2万+

4.6 四种引用设计思想

四种引用设计思想 目录介绍 1.Notification简单概述 2.Notification通知用途 3.Notification的基本操作 3.1 Notification创建必要的属性 3.2 Notification简单创建步骤 3.3 关于setSmallIcon()与setLargeIcon()区别 3.4 Notificatio...

杨充 4491

Android10.0通知Notification的使用这一篇就够了

文章目录前言通知概述不同android版本上通知功能通知的结构创建通知1.创建渠道2.设置点击事件3.构造Notification对象并显示通知通知的操作通知渠道通知的级别 前言 最近一段时间写的都是android源码的文章,前几天在公司做了一个需求是关于前台服务的,在写前台服务的时候深入使用到了通知,今天就先写一篇文章总结一下通知的相关内容,后面有时间了在介绍一下前台服务的相关内容。 通知概述 ...

一只特立独行的猪 5万+

医学影像处理实战:用SimpleITK将CT数据重采样到统一尺寸(附完整代码)

本文针对医学影像分析中多源CT数据尺寸不一致导致深度学习模型训练失败的问题,提供了基于SimpleITK的实战解决方案。通过深入解析图像尺寸与间距的关系,详细阐述了如何通过调整体素间距进行重采样,而非简单补零,从而在保持图像物理尺寸不变的前提下,将数据统一到固定尺寸,确保输入网络的3D数据空间对齐且解剖信息准确。

weixin_29062671的博客 269

【OpenCV】手眼标定实战:从原理到calibrateHandEye的完整实现

本文详细解析了机器人视觉中的手眼标定原理与实战,重点介绍了如何使用OpenCV的calibrateHandEye函数实现从数据采集到结果验证的完整流程。文章深入剖析了AX=XB核心方程,区分了眼在手上与眼在手外两种配置,并提供了详细的代码示例与避坑指南,帮助开发者精准建立相机与机械臂末端的坐标转换关系,是机器人精准抓取的关键技术。

weixin_29046611的博客 507

android notification的使用方法,Android中Notification通知用法详解

Notification的作用通知(Notification)是Android系统中比较有特色的一个功能。当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以用通知来实现用法首先我们需要一个NotificationManager来对通知进行管理,可以调用getSystemService()方法得到,方法接收一个字符串参数用于确定获取系统的哪个服务,这里我们传入NOTIFI...

weixin_34941214的博客 769

【UE5】UE5 Dedicated Server专用服务器与网络同步

这篇文章是个人在学习UE4的网络同步方面的内容的一些记录,因为UE5出来了,顺带也一起熟悉熟悉UE5,所以也就直接使用UE5来实践了。说句实在话,UE4网络同步这块确实挺难的,我自己在网上搜索的博客的内容要么停留在很浅层面只搭建一个ds服务器,要么就直接深入源码去剖析UE4的网络机制,处在中间层面的内容少之又少,不得不自己好一阵研究,强烈推荐这几位博主的博文,我在学习的过程中也从中受益匪浅。 Ken_An、风蚀之月、 刘东无敌还有我师傅推荐给我的一本关于UE4网络的PDF。 一、什么是Dedicated

Goulandis 3万+

android 悬浮通知栏_(Android)Notification使用详解

Notification使用Notification是Android中当应用程序在后台运行时,借助通知就可以在手机最上方显示一个通知的图标,下拉状态栏就可以看到详细内容。基本概念通知还是比较灵活的,可以在活动中创建,也可以在服务和广播中创建,但是通知通常是在程序在后台运行时调用。总体来说,创建和使用用法都是相同的。详细步骤创建NotificationManager来对通知进行管理,通过调用getS...

weixin_32897341的博客 1794

红外小目标检测新思路:当DETR遇上Mamba状态空间模型,速度提升3倍

本文探讨了将Mamba状态空间模型与DETR框架结合,用于解决红外小目标检测的难题。该创新方案通过线性复杂度的Mamba模块替代传统Transformer的自注意力机制,在保持高检测精度的同时,显著提升了推理速度,实现了实时性能的突破,为无人机巡检、安防监控等场景提供了高效解决方案。

hhh00的博客 664

EM的理论与实践(基础篇)

EM理论与实践

m0_61544122的博客 2378

android系统 通知,Android中通知的使用-----Notification详解

Notification —— 通知,是一种让你的应用程序在不使用Activity的情况下警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。 Notification 是由NotificationManager(系统服务)统一管理的。一般来说,一个Notification应该传送的消息包括:1 ...

weixin_28746223的博客 798

第一章:信号链的精度之战:深入解决电流采样偏差

摘要:本文深入探讨了FOC控制中电流采样偏差问题及其解决方案。电流采样偏差主要来源于偏移误差、增益误差、非线性误差和温漂四大类,其中偏移误差对FOC性能影响最为严重。硬件方面建议采用高精度采样电阻、低失调运放和独立基准电压等设计;软件层面提出了上电自动零点校准、在线实时补偿和模型闭环补偿三种策略。最后介绍了量产自动化校准系统,通过硬件优化和软件补偿相结合,确保每台产品电流采样精度的一致性,为FOC控制奠定坚实基础。

汽车软件开发 602

Android通知(Notification)使用详解

一、通知(Notification) 通知是可以在应用常规UI外部向用户显示的消息。通常使用NotificationCompat.Builder对象构建UI信息和操作,调用NotificationCompat.Builder.build()返回具体的Notification对象,最后通过调用NotificationManager.notify()将Notification对象传递给系统。 N

dapangzao的专栏 3510

把 SAP ABAP BDC 跑得又快又稳:从 SHDB 录屏到可上线的批量上传程序(含 MM01 案例与源码)

SAP BDC批量数据迁移实践 摘要:本文介绍了SAP系统中BDC(Batch Data Communication)技术在数据迁移中的应用。文章首先对比了Session method和CALL TRANSACTION method两种实现方式的特点及适用场景,重点推荐使用Session method进行主数据批量处理。然后详细讲解了通过SHDB工具录制MM01事务创建物料主数据的完整流程,包括如何生成基础BDC代码。最后展示了将录制的脚本改造为可批量处理文件数据的实用程序,核心改动包括定义数据结构、读取文

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 322

UFSV3.1-RPMB实现与测试

UFS RPMB功能验证与测试指南 本文介绍了UFS(通用闪存存储)中RPMB(重放保护内存块)的功能验证与测试方法。主要内容包括: RPMB基础配置: 在Linux系统中查看RPMB设备节点 读取RPMB单元描述符获取配置信息 配置RPMB区域大小(16MB)和使能状态 RPMB特性验证: 获取单次写最大请求(16KB) 测试未编程认证密钥时的读写操作 验证认证密钥编程过程 测试用例: 包含4个测试用例,验证RPMB在不同状态下的行为 提供了详细的命令行操作和预期结果 本文可作为UFS RPMB功能验证。

小码哥的博客 1254

Android28--Android之Android的通知(Notification)使用详解

http://www.2cto.com/kf/201502/374946.html

小冯的Blog 1307

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android Notification 使用详解之二:可更新进度的通知

前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          优快云:http://www.youkuaiyun.com          雨季o莫忧离:http://blog.youkuaiyun.com/luckkof 正文   上次和大家分享了关于Notification的基础应用,包括简单的通知和自定义视图的通知。今天和

奥特曼 1673

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android 广播通知 进度,详解Android中使用Notification实现进度通知栏(示例三)

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

weixin_30030255的博客 426

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: Android中获取应用程序(包)的大小-----PackageManager的使用(二)
下一篇: Andriod中绘(画)图----Canvas的使用详解
qinjuning
博客等级 码龄18年 5288粉丝 43原创
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值