【Android入门到项目实战-- 7.1】—— 如何使用通知?

news2024/11/24 3:40:54

目录

一、创建通知的步骤

1、创建一个NotificationManager实例

2、使用一个Builder构造器来创建Notification对象

3、设置标题、文字、时间和图标等信息

4、显示通知

二、通知实例演示

三、实现通知的点击效果

1、PendingIntent

        什么是PendingIntent?

        如何使用PendingIntent?

四、消除状态栏的通知

1、使用setAutoCancel()方法

2、显式地调用NotificationManager的cancel()方法


        当某个用户程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知实现,发送通知后,手机最上方的状态栏中会显示一个通知的图标。

一、创建通知的步骤

1、创建一个NotificationManager实例

        NotificationManager可以对通知管理,调用Context的getSystemService()方法获取到,其接收一个字符串用于确定获取系统的哪个服务。

        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

2、使用一个Builder构造器来创建Notification对象

        Notification notification = new NotificationCompat.Builder(context).build();

3、设置标题、文字、时间和图标等信息

Notification notification = new NotificationCompat.Builder(context)
                .setContentTitle("标题")
                .setContentText("文本")
                .setWhen(System.currentTimeMillis())
                .build();
    }

4、显示通知

        第一个参数是id,需要保证每一个通知的id不同。

manager.notify(1,notification);

二、通知实例演示

        下面尝试实现一下前面的步骤。

        新建Notification Test项目。

        修改activity_main.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="match_parent"
    android:orientation="vertical">
    
    <Button
        android:id="@+id/send_notice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送通知"/>

    

</LinearLayout>

        修改MainActivity代码,如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button sendNotice = (Button) findViewById(R.id.send_notice);
        sendNotice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                Notification notification = new NotificationCompat.Builder(MainActivity.this)
                        .setContentTitle("标题")
                        .setContentText("文本")
                        .setWhen(System.currentTimeMillis())
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                        .build();
                manager.notify(1,notification);
            }
        });


    }

}

效果如下:

 点击按钮后会收到一条通知,但是点击通知没有任何效果,要想实现点击效果,需要在代码中设置,使用PendingIntent。

三、实现通知的点击效果

1、PendingIntent

        实现点击效果前,需要先了解一下PendingIntent。

        什么是PendingIntent?

        可以把PendingIntent简单的理解为延迟执行的Intent。

        如何使用PendingIntent?

        它主要提供了几个静态方法用于获取PendingIntent实例,可以根据需求使用getActivity()方法、getBroadcast()方法、getService()方法,这些方法的参数相同,第一个参数是Context,第二个一般用不到,传入0即可,第三个是一个Intent对象,第四个是确定PendingIntent的行为,有FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT这4种值可选,但是通常情况下传入0即可。

        接下来优化一下前面的项目,加上点击效果,点击时启动另一个活动。

        首先新建活动,名字为NotificationActivity。

        修改activity_notification.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="24sp"
        android:text="第二个活动页面"/>

</RelativeLayout>

        修改MainActivity代码,如下:

        首先使用Intent构造出想要跳转的页面,然后传入PendingIntent的getActivity()方法里,最后在NotificationCompat.Builder中调用setContentIntent()方法。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button sendNotice = (Button) findViewById(R.id.send_notice);

        Intent intent = new Intent(this,NotificationActivity.class);
        PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);
        
        sendNotice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
             ................
                        .setContentIntent(pi)
                        .build();
                manager.notify(1,notification);
            }
        });


    }

}

效果如下:

虽然实现了跳转,但是状态栏的通知并没有消失,除非手动清除,下面继续实现自动消除状态栏的通知。

 

四、消除状态栏的通知

        有两种方法可以消除通知,一是在NotificationCompat.Builder中再连缀一个setAutoCancel()方法,另一种是显式地调用NotificationManager的cancel()方法将它取消。

1、使用setAutoCancel()方法

Notification notification = new NotificationCompat.Builder(MainActivity.this)

                        ...........

                        .setAutoCancel(true)
                        .build();

2、显式地调用NotificationManager的cancel()方法

        如果你想取消哪条通知,在cancel()方法中传入该通知的id。

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                manager.cancel(1);


 通知的基本使用先介绍到这里,下面将要学习通知的进阶和高级用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/461841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

后台-husky提交代码规范使用

husky是一个git hook工具&#xff0c;可以帮助我们触发git提交的各个阶段&#xff1a;pre-commit、commit-msg、pre-push 1.如何使用husky呢&#xff1f; npx husky-init && npm installWindows安装不成功试试npx husky-init && npm install 2.git commit规范…

线索二叉树的前序遍历

线索二叉树原理 遍历二叉树的其实就是以一定规则将二叉树中的结点排列成一个线性序列&#xff0c;得到二叉树中结点的先序序列、中序序列或后序序列。这些线性序列中的每一个元素都有且仅有一个前驱结点和后继结点。 但是当我们希望得到二叉树中某一个结点的前驱或者后继结点时…

计算机组成原理---第 6 章总线系统

一、总线的概念和结构形态 总线的基本概念 ⑴概述 总线是构成计算机系统的互联机构&#xff0c;是多个系统功能部件之间进行数据传送的公共通路。 ⑵ 分类 总线的分类方式有很多&#xff1a;如被分为外部总线和内部总线、系统总线和非系统总线、片内总线和PCB板级总线、串行…

VS2022+opengl环境配置

glfw下载Download | GLFW glad下载https://glad.dav1d.de/ Freeglut下载 https://freeglut.sourceforge.net/index.php#download cmake下载 Download | CMake glfwFreeglut 用cmake配置Freeglut&#xff0c;生成vs工程项目&#xff0c;用vs2022编译项目&#xff0c;生成fr…

27.Spring的事务控制

目录 一、编程式事务控制相关对象。 &#xff08;1&#xff09;事务管理器。 &#xff08;2&#xff09;事务定义信息对象&#xff08;如隔离级别、传播行为&#xff09;。 &#xff08;3&#xff09;事务状态对象。 &#xff08;4&#xff09; 知识要点。 二、声明式事务…

基于STM32的开源简易示波器项目

目录 ​一、前言 二、硬件接线 三、信号的采集 四、代码配置 五、数据的处理 六、模拟正弦波输出 七、模拟噪声或三角波输出 八、显示函数与按键控制 ​一、前言 该项目是基于正点原子精英板制作的一个简易示波器&#xff0c;可以读取信号的频率和幅值&#xff0c;并可…

JetpackCompose从入门到实战学习笔记14

JetpackCompose从入门到实战学习笔记14——Coli的简单使用 1.简介&#xff1a; Coil 是一个 Android官方出的配合Jetpack的图片加载库&#xff0c;通过 Kotlin 协程的方式加载图片。 优点如下&#xff1a; 更快: Coil 在性能上有很多优化&#xff0c;包括内存缓存和磁盘缓存…

C/C++基础知识

专栏&#xff1a;C/C 个人主页&#xff1a; C/C基础知识 前言C关键字(C98)命名空间命名空间的定义正常的命名空间的定义如何使用命名空间 命名空间可以嵌套同一个工程中允许存在多个相同名称的命名空间&#xff0c;编译器最后会合成同一个命名空间中(一个工程中的.h文件和test.…

(数字图像处理MATLAB+Python)第七章图像锐化-第一、二节:图像锐化概述和微分算子

文章目录 一&#xff1a;图像边缘分析二&#xff1a;一阶微分算子&#xff08;1&#xff09;梯度算子A&#xff1a;定义B&#xff1a;边缘检测C&#xff1a;示例D&#xff1a;程序 &#xff08;2&#xff09;Robert算子A&#xff1a;定义B&#xff1a;示例C&#xff1a;程序 &a…

Tailscale: Please Restart the Tailscale Windows Service

之前用的好好的&#xff0c;最近重新升级了一下Tailscale后发现一直连不上。右击win10右下角的Tailscale图标&#xff0c;第一行显示&#xff1a;Please Restart the Tailscale Windows Service。 我查看了一下服务&#xff0c;发现Tailscale是自动的&#xff0c;这里的启动类…

vuex存储数组(新建,增,删,更新),并存入localstorage定时删除

vuex存储数组(新建&#xff0c;增&#xff0c;删&#xff0c;更新)&#xff0c;并存入localstorage定时删除 本文目录 vuex存储数组(新建&#xff0c;增&#xff0c;删&#xff0c;更新)&#xff0c;并存入localstorage定时删除使用背景store中实现增删改组件中维护数组&#x…

缩小数据文件

今天又出现12.2c 环境的问题&#xff0c;1T的数据空间还剩下2G&#xff0c;吓了一身冷汗&#xff0c;赶紧查看原因&#xff0c;不知道哪路业务大神作妖了。 发现sysaux和system增加N多数据文件&#xff0c;而且目前使用不多&#xff0c; 缩小表空间的数据文件 可以使用下面的语…

直升机空气动力学基础---002 桨叶的主要参数

源于 1.桨叶的平面形状和主要参数 由于其设计制造比较简单&#xff0c;早期直升机大多采用矩形桨叶&#xff0c;缺点是在高速气流中&#xff0c;无法抑制桨尖涡&#xff0c;会消耗向下的诱导速度&#xff0c;降低旋翼的拉力。现代多采用梯形桨叶。 桨尖后掠能够降低桨尖涡 …

【Linux】Linux基本指令(2)

一.你如何看待指令 指令说白了就是可执行程序&#xff0c;且指令一定是在系统的某一个位置存在的&#xff0c;在执行指令前&#xff0c;我们需要先找到它。 二.man指令 众所周知&#xff0c;Linux的指令有很多&#xff0c;指令的选项也有很多&#xff0c;我们不可能全记住&…

android注解注入AspectJ面向切面AOP插桩技术改变android原生类对象行为记录View点击事件,Java(3)

droid注解注入AspectJ面向切面AOP插桩技术改变android原生类对象行为记录View点击事件&#xff0c;Java&#xff08;3&#xff09; 动态改变Toast提示的内容&#xff0c;弹之前修改。Button在每次点击后记录。 import android.util.Log; import android.widget.Toast;import o…

基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …

论Shell编程规范与变量

目录 一&#xff1a;shell脚本 1.shell概述 2.linux中包含的常用shell 3.shell脚本概述 4.shell脚本应用场景 5.shell脚本的作用 6.用户的登录shell 二&#xff1a; 编写脚本 1.脚本的基本格式 2.shell脚本的执行 3. 交互式硬件设备 4.重定向操作 5.管道操作符号 “…

信号完整性分析基础知识之传输线和反射(一):阻抗变化引起反射

阻抗不连续引起的反射和失真可能会导致信号的误触发和误码&#xff0c;这是导致信号失真和质量下降的主要原因。 在某些情况下&#xff0c;这看起来像振铃。当信号电平下降时&#xff0c;下冲会影响噪声预算并导致误触发。或者&#xff0c;在下降信号上&#xff0c;峰值可能会上…

阅读笔记 First Order Motion Model for Image Animation

文章解决的是图片动画的问题。假设有源图片和驱动视频&#xff0c;并且其中的物体是同一类的&#xff0c;文章的方法让源图片中的物体按照驱动视频中物体的动作而动。 文章的方法只需要一个同类物体的视频集&#xff0c;不需要而外的标注。 方法 该方法基于self-supervised策…

Qt信号槽原理

Qt之信号槽原理 一.概述 所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c;按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号&#xff08;signal&#xff09;。这种发出是没有目的的&#xff0c;类似广播。如果有对象对这…