android notification 的总结分析

Android Notification 的总结分析

概述

Android Notification 是 Android 系统中的一个提醒用户的机制。当应用程序需要提醒用户时,它可以创建一个 Notification 对象并在系统状态栏中显示。用户可以点击该 Notification 对象以打开应用程序或处理特定的任务。Android Notification 可以显示到应用程序在后台或者设备已锁定时。在本文中,我们将对 Android Notification 进行总结和分析。

Android Notification 的基本组成

  • 通知标题及内容:通知的标题和内容告诉用户通知所涉及的信息。
  • 时间戳:显示通知发布的时间(当然,你可以在通知后端设置)
  • 通知图标:一个小图标,用于标识通知来源。
  • 扩展内容:收件人可以下拉通知以获得完整内容,否则就只能看到标题和简短内容。
  • 通知行为:通知可以设置一些特定的操作。例如,当用户点击通知时应该打开哪个 Activity 或打开一个 Web 页面。

Android Notification 的创建流程

  1. 创建 NotificationChannel 对象
  2. 构建 NotificationCompat.Builder 对象
  3. 设置通知内容
  4. 策略性解析 PendingIntent 对象
  5. 将通知发送到状态栏

示例1:基本的文本通知

以一个普通的文本通知作为示例

  • 在 AndroidManifest.xml 文件中添加 Vibrate 和 WakeLock 权限:
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
  • 在 MainActivity 中创建 NotificationChannel 和 NotificationCompat.Builder 对象:
private val CHANNEL_ID = "default"

private fun createNotificationChannel() {
    // Create the NotificationChannel, but only on API 21+ because
    // the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val name = getString(R.string.channel_name)
        val descriptionText = getString(R.string.channel_description)
        val importance = NotificationManager.IMPORTANCE_DEFAULT
        val channel = NotificationChannel(CHANNEL_ID, name, importance).apply {
            description = descriptionText
        }
        // Register the channel with the system
        val notificationManager: NotificationManager =
                getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(channel)
    }
}

private fun sendNotification(messageBody: String) {
    val intent = Intent(this, MainActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    val pendingIntent: PendingIntent = PendingIntent.getActivity(this, 0, intent, 0)

    val builder = NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_launcher_background)
            .setContentTitle(getString(R.string.notification_title))
            .setContentText(messageBody)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setContentIntent(pendingIntent)
            .setAutoCancel(true)

    with(NotificationManagerCompat.from(this)) {
        // notificationId is a unique int for each notification that you must define
        notify(0, builder.build())
    }
}
  • 在 onCreate 中调用 createNotificationChannel:
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        createNotificationChannel()
    }
  • 在需要发送通知时调用 sendNotification :
sendNotification("This is the message body of the notification.")

示例2:添加扩展内容的通知

示例2 演示了如何向通知中添加扩展内容。

  • 在 MainActivity 中创建 NotificationCompat.Builder 对象,并添加扩展内容
private fun sendNotificationWithTextAndPicture(messageBody: String, pictureUrl: String) {
    val intent = Intent(this, MainActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    val pendingIntent: PendingIntent = PendingIntent.getActivity(this, 0, intent, 0)

    val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_launcher_background)
            .setContentTitle(getString(R.string.notification_title))
            .setContentText(messageBody)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setContentIntent(pendingIntent)
            .setAutoCancel(true)

    // Add the picture
    val picture =
            BitmapFactory.decodeStream(URL(pictureUrl).openConnection().getInputStream())
    notificationBuilder.setStyle(
            NotificationCompat.BigPictureStyle()
                    .bigPicture(picture)
                    .bigLargeIcon(null)
    )

    with(NotificationManagerCompat.from(this)) {
        // notificationId is a unique int for each notification that you must define
        notify(0, notificationBuilder.build())
    }
}
  • 在需要发送通知时调用 sendNotificationWithTextAndPicture :
sendNotificationWithTextAndPicture(
        "This is the message body of the notification with picture.",
         "https://www.example.com/picture.png")

总结

本文总结了 Android Notification 的基本组成和创建流程,以及示范了两个常见的用例。在实践中,你可以根据自己的需求对通知进行自定义。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android notification 的总结分析 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • Visual Studio 2015正式版/产品密钥

    Visual Studio 2015正式版/产品密钥的完整攻略 Visual Studio 2015是一款流行的集成开发环境,但在安装和使用过程中,我们可能会遇到一些问题,例如需要产品密钥等。本文将为您提供一份详细的Visual Studio 2015正式版/产品密钥的完整攻略,包括两个示例说明。 安装Visual Studio 2015 在安装Visual…

    other 2023年5月5日
    00
  • JS 插件dropload下拉刷新、上拉加载使用小结

    JavaScript 插件 dropload 的使用小结 简介 dropload 是一个帮助实现下拉刷新和上拉加载的 JavaScript 插件,简单易用,并提供了多种自定义配置和回调函数来满足不同需求场景的使用。在下面的介绍中,我们将详细讲解如何使用和配置 dropload。 安装 你可以从 GitHub 或者 npm 上找到 dropload,然后按照相…

    other 2023年6月25日
    00
  • web是什么意思?

    Web(全称World Wide Web)指的是万维网,是互联网的一部分,是一种基于超文本的、全球性的、公共的、互动的信息资源网络。Web是一种客户端/服务器模型的应用,通过HTTP协议从Web服务器获取HTML(超文本标记语言)文件,然后在客户端浏览器中解释并显示出来。 Web的起源可以追溯到1989年,由英国计算机科学家蒂姆·伯纳斯-李(Tim Bern…

    其他 2023年4月16日
    00
  • Android如何实现动态滚动波形图(心电图)功能

    Android实现动态滚动波形图(心电图)功能攻略 1. 准备工作 在开始实现动态滚动波形图功能之前,需要进行以下准备工作: 确保你已经安装了Android开发环境,并且熟悉使用Android Studio进行开发。 确保你已经了解了Android绘图相关的知识,包括Canvas、Paint等类的使用。 2. 创建布局文件 首先,我们需要创建一个布局文件来显…

    other 2023年8月25日
    00
  • Android启动初始化方案App StartUp的应用详解

    Android启动初始化方案App StartUp的应用详解 什么是App StartUp App StartUp是Android Jetpack库中的一部分,提供了一种标准化的方式来在应用程序启动时执行后台初始化任务,以便在应用程序启动后更快地响应用户操作。 如何集成App StartUp 集成时需要创建一个实现了AppInitializer接口的类,在这…

    other 2023年6月20日
    00
  • Java基础-Java变量的声明和作用域

    Java基础 – Java变量的声明和作用域 在Java中,变量是用来存储数据的容器。在使用变量之前,我们需要先声明它们,并指定它们的类型。本攻略将详细介绍Java变量的声明和作用域。 变量的声明 在Java中,变量的声明包括两个步骤:指定变量的类型和给变量起一个名字。变量的类型决定了变量可以存储的数据类型,而变量的名字用于在程序中引用该变量。 下面是一个示…

    other 2023年8月8日
    00
  • DB2获取当前用户表、字段、索引等详细信息

    获取当前用户表、字段、索引等详细信息是DB2数据库管理中一个常见的操作需求,可以通过DB2系统表进行查询。下面是完整的攻略: 1.查询当前用户下所有表 可以通过查询SYSCAT.TABLES系统表获取当前用户下的所有表信息,包括表名、表所属的模式名、表所属的空间名以及表的类型等。查询语句如下: SELECT TABNAME, TABSCHEMA, TBCRE…

    other 2023年6月25日
    00
  • linuxctrl+z的使用方法

    Linux下Ctrl + Z的使用方法 简介 在Linux中,Ctrl + Z组合键可以将当前正在运行的进程暂停,并将该进程放到后台去执行。 语法 在命令行下输入以下组合键: Ctrl + Z 示例 以下是两个示例: 示例1:暂停一个正在运行的进程 例如,我们启动了一个实例并希望暂停它,我们可以在终端中使用Ctrl + Z组合键: $ node app.js…

    其他 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部