.net开发安卓入门 - Notification(通知)

news2024/11/15 17:34:09

.net开发安卓入门 - Notification(通知)

  • 通知的布局
  • 创建通知通道
  • 创建和发布通知
  • 我的样例
    • 效果图
    • 代码
    • 资源文件
  • 常见问题
    • 一切代码都准备就绪了,为什么就是不提示消息内容呢?
    • 为什么我的通知不是弹出式的
  • 同系列文章推荐

通知的布局

在这里插入图片描述

创建通知通道

在 Android 8.0 上运行的应用必须为其通知创建通知通道。 通知通道需要以下三条信息:

  • 标识通道的包唯一的 ID 字符串。
  • 将显示给用户的通道的名称。 名称必须介于 1 到 40 个字符之间。
  • 通道的重要性。
    应用需要检查其正在运行的 Android 版本。 运行版本低于 Android 8.0 的设备不应创建通知通道。 以下方法是如何在活动中创建通知通道的一个示例:
void CreateNotificationChannel()
{
    if (Build.VERSION.SdkInt < BuildVersionCodes.O)
    {
        // Notification channels are new in API 26 (and not a part of the
        // support library). There is no need to create a notification
        // channel on older versions of Android.
        return;
    }

    var channelName = Resources.GetString(Resource.String.channel_name);
    var channelDescription = GetString(Resource.String.channel_description);
    var channel = new NotificationChannel(CHANNEL_ID, channelName, NotificationImportance.Default)
                  {
                      Description = channelDescription
                  };

    var notificationManager = (NotificationManager) GetSystemService(NotificationService);
    notificationManager.CreateNotificationChannel(channel);
}

创建和发布通知

若要在 Android 中生成通知,请执行以下步骤:

  1. 实例化 NotificationCompat.Builder 对象。
  2. 对对象调用各种方法 NotificationCompat.Builder 以设置通知选项。
  3. 调用对象的 Build 方法 NotificationCompat.Builder 以实例化通知对象。
  4. List item

调用通知管理器的 Notify 方法发布通知。

必须至少为每个通知提供以下信息:

  1. 大小 (为 24x24 dp 的小型图标)
  2. 简短标题
  3. 通知的文本

下面的代码示例演示如何用于 NotificationCompat.Builder 生成基本通知。 请注意, NotificationCompat.Builder 方法支持 方法链接;也就是说,每个方法返回生成器对象,以便可以使用最后一个方法调用的结果调用下一个方法调用:

// Instantiate the builder and set notification elements:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my first notification!")
    .SetSmallIcon (Resource.Drawable.ic_notification);

// Build the notification:
Notification notification = builder.Build();

// Get the notification manager:
NotificationManager notificationManager =
    GetSystemService (Context.NotificationService) as NotificationManager;

// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);

我的样例

效果图

在这里插入图片描述

代码

using Android.App;
using Android.Content;
using Android.Graphics;
using Android.Media;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using AndroidX.AppCompat.App;
using AndroidX.Core.App;
//using Android.Support.V4.App;
//using TaskStackBuilder = Android.Support.V4.App.TaskStackBuilder;
//using Android.Media;

namespace 我的第一个安卓程序
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        static readonly int NOTIFICATION_ID = 1000;
        static readonly string CHANNEL_ID = "notice"; 
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);

            #region 创建通知通道


            if (Build.VERSION.SdkInt < BuildVersionCodes.O)
            {
                // Notification channels are new in API 26 (and not a part of the
                // support library). There is no need to create a notification
                // channel on older versions of Android.
                return;
            }

            var name = Resources.GetString(Resource.String.channel_name);
            var description = GetString(Resource.String.channel_description);
            var channel = new NotificationChannel(CHANNEL_ID, name, NotificationImportance.High)
            {
                Description = description,
                
            };

            var notificationManager = (NotificationManager)GetSystemService(NotificationService);
            notificationManager.CreateNotificationChannel(channel);


            #endregion


            #region *****************在这里添加了用户控件处理代码start*****************
            //找到两个edittext
            var txtInput = FindViewById<EditText>(Resource.Id.txtInput);
            var txtNumInput = FindViewById<EditText>(Resource.Id.txtNumInput);
            //找到btn按钮
            var button = FindViewById<Button>(Resource.Id.btnTest);
            button.Click += (es, ee) =>
            {
                //吐司内容
                Toast.MakeText(this, $"txtInput的内容是:{txtInput.Text},txtNumInput数字是:{txtNumInput.Text}", ToastLength.Long).Show();
            };
            #endregion *****************在这里添加了用户控件处理代码end*****************
        }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }

        [Java.Interop.Export]
        public void ShowMessage(View viwe)
        {
            Toast.MakeText(this, $" 这是通过ShowMessage进来的", ToastLength.Long).Show();
        }


        [Java.Interop.Export]
        public void ShowSecondActivity(View viwe)
        {
            StartActivity(typeof(SecondActivity));
        }

        [Java.Interop.Export]
        public void ShowIntetActivity(View viwe)
        {
            Intent intent = new Intent();
            intent.SetClass(this, typeof(SecondActivity));
            StartActivity(intent);
        }


        int count = 0;
        [Java.Interop.Export]
        public void ShowSystemNotice(View view)
        {
            // Instantiate the Image (Big Picture) style:
            NotificationCompat.BigPictureStyle  picStyle = new NotificationCompat.BigPictureStyle(); 
          // Convert the image to a bitmap before passing it into the style:
          picStyle.BigPicture(BitmapFactory.DecodeResource(Resources, Resource.Drawable.notice));

            // Set the summary text that will appear with the image:
            picStyle.SetSummaryText("就是超级大的图标能咋滴?");


            // "notice" 是通知通道,这个可以自己定义
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
                .SetContentTitle("这是一个通知")
                .SetContentText("我现在通知你啦, Hello World!")
                .SetDefaults((int)NotificationDefaults.All)
                .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Ringtone)) 
                .SetSmallIcon(Resource.Mipmap.notice_small)
                .SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.notice_normal))
                .SetStyle(picStyle);

            // Build the notification:
            Notification notification = builder.Build();

            // Get the notification manager:
            var notificationManager = NotificationManagerCompat.From(this); 
           
            notificationManager.Notify(NOTIFICATION_ID, notification);
        }
    }
}

资源文件

在这里插入图片描述

常见问题

一切代码都准备就绪了,为什么就是不提示消息内容呢?

消息的权限是在APP中进行设置的,所以需要手动在模拟器中开启消息的权限,当然也可以通过资源配合代码获取开启通知的权限,我简单处理就是手动开启权限,开启方式:
设置–>应用–>找到自己的应用点击–>通知–打开就可以了如下图
在这里插入图片描述

为什么我的通知不是弹出式的

一样在系统中进行设置,设置方式自行摸索吧

同系列文章推荐

.net开发安卓入门 - 环境安装
.net开发安卓入门 - Hello world!
.net开发安卓入门 - 基本交互(Button,输入EditText,TextView,Toast)
.net开发安卓入门 - 布局与样式
.net开发安卓入门 - Activity

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

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

相关文章

yolov7运行自己的VOC格式数据集

yolov7运行VOC格式数据集测试开发环境使用自己的VOC格式数据集训练修改配置文件yolov7.yaml修改配置文件voc.yamlVOC格式数据集转换COCO格式开始训练重头开始fine-trainBUG常见报错1常见报错2成功训练网络评价指标可视化测试开发环境 去官网下载yolov7的权重文件&#xff0c;放…

async/await

理解async函数就要先理解generator (生成器)函数,因为async是generator函数的语法糖。 Generator函数 Generator 函数是 ES6 提供的一种异步编程解决方案&#xff0c;可以先理解为一个状态机&#xff0c;封装了多个内部状态&#xff0c;执行Generator函数返回一个遍历器对象&…

【ChatGPT 中文版插件】无需注册体验 ChatGPT 的攻略

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

假设检验介绍

数据科学是一个不断发展的领域&#xff0c;近年来越来越受欢迎。数据科学的一个重要组成部分是假设检验的使用&#xff0c;它可用于从数据中得出结论并做出明智的决策。 什么是假设检验&#xff1f; 假设检验是数据科学中常用的方法&#xff0c;用于评估关于总体参数的假设的有…

前端超级实用的Visual Studio Code插件

前端超级实用的Visual Studio Code插件1、Bracket Pair Colorizer&#xff1a;可以把不同嵌套层级的各种类型的括号&#xff0c;用不同的颜色标注出来2、Auto Close Tag:自动闭合HTML标签3、Auto Rename Tag:自动关闭标签&#xff0c;在开始标记的结束括号中键入后&#xff0c;…

2022年浙大城市学院新生程序设计竞赛(同步赛)D. Cutting with Lines Ⅰ(线段分割 离散化+并查集 补写法)

题目 二维平面&#xff0c;左下角(0,0)右上角(n,m)(1<n,m<1e6)的一块矩形&#xff0c; q(q<2e3)次线段切割操作&#xff0c;操作分四种&#xff1a; ai 1 x&#xff0c;表示切割(x,m)到(x,m-ai)这条竖直线段(0<x<n,1<ai<1e6) ai 2 x&#xff0c;表示切…

【车载开发系列】UDS诊断---诊断设备在线($0x3E)

【车载开发系列】UDS诊断—诊断设备在线&#xff08;$0x3E&#xff09; 一.概念定义 此服务用于向ECU指示诊断工具在线。当其他UDS服务不存在时&#xff0c;为防止ECU自动转入默认会话模式并停止通信&#xff0c;必须使用此服务。建议以功能寻址的方式发送该指令它唯一的功能…

解决编译 Visual Studio 工程时报 NuGet Package Restore Failed

背景 域渗透的过程中会用到很多 .Net 工具。但是官方仓库没有直接发布的二进制包&#xff0c;那么就需要我们自己手动编译。这些工具又有很多会选择做 NuGet 依赖。如果本地配置不对&#xff0c;就会导致编译失败。 接下来我们就讨论一下怎么解决这个问题。 现象 我们以 AD…

【Vue 快速入门系列】ref、props、mixin、插件使用、样式混合解决方案合集

文章目录前言一、ref属性的使用二、props配置三、mixin混合语法1.简介2.使用方法3.注意点4.结合实例使用①全局混入②局部混入四、插件的使用1.插件语法①定义插件②引入插件并使用2.上手插件五、样式混合问题前言 在前面介绍到了Vue的一些基本概念与如何使用Vue&#xff0c;并…

ARM64(M1版)Mac运行MAA以及AzurLaneAutoScript自动化打明日方舟和碧蓝航线

前言 首先感谢Github上面MAA以及AzurLaneAutoScript的开发组&#xff0c;让我们有工具可用。 再感谢吕明珠LmeSzinc 和binss 大佬&#xff0c;他们的教程让我受益良多。 能看到这篇教程的&#xff0c;想必都拥有M1或者M2芯片的Mac电脑&#xff0c;因为新芯片不能安装双系统所…

RabbitMQ:安装配置

一般来说&#xff0c;安装分为两种方式&#xff1a;1. 下载 RabbitMQ 源文件&#xff0c;解压源文件之后进行安装。2. 通过 brew 命令安装。在这里&#xff0c;推荐使用 brew 来安装&#xff0c;非常强大的 Mac 端包管理工具。 ~ 本篇内容包括&#xff1a;Mac 安装 RabbitMQ、M…

SSM网上在线水果店商城超市网站平台

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 管理员角…

【数电实验】组合逻辑电路

实验三 触发器及其应用 一 实验目的 1 了解触发器的触发方式&#xff08;上升沿触发、下降沿出发&#xff09;及其触发特点&#xff1b; 2 测试常用触发器的逻辑功能&#xff1b; 3 掌握用触发器设计同步时序逻辑电路的方法。 二 实验内容 1 测试双D触发器74HC74的逻辑功能…

cmu 445 poject 1笔记

文章目录cmu 445 poject 1笔记Extendible hashingLRU-KBufferPool Managercmu 445 poject 1笔记 2022年的任务 https://15445.courses.cs.cmu.edu/fall2022/project1/ extendible hashinglru-kbufferpool manger 本文不写代码&#xff0c;只记录遇到的一些思维盲点 Extendible …

SpringCloud02:微服务架构rest模拟环境搭建

微服务架构rest模拟环境搭建Rest环境搭建&#xff1a;服务提供者springcloud主模块pom.xmlspringcloud-api模块springcloud-provider-dept-8001服务提供模块配置相关Rest环境服务消费者Java编写Rest环境搭建&#xff1a;服务提供者 springcloud主模块pom.xml <?xml versi…

让我们看看xargs做了什么事情?

说到xargs,不得不提到 find 和 grep ,当然了少不了管道 | find 和 grep我经常会搞混掉这两个功能很相似的命令的用法,总是会记不太住怎么用,也借此文章加深一下记忆。 find ./xx/xx/ -name abc.v grep -r abc ./* // -r 表示整个目录查找 一般我们会使用find…

[附源码]计算机毕业设计基于Java酒店管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Python Open3D点云配准点对点,点对面ICP(Iterative Closest Point)

Python Open3D点云配准 ICP(Iterative Closest Point&#xff09; 这篇博客将介绍 迭代最近点配准算法(Iterative Closest Point, ICP) 。多年来&#xff0c;它一直是研究和工业中几何注册的支柱。输入是两个点云和一个初始变换&#xff0c;该变换大致将源点云与目标点云对齐。…

g++多文件编译

g windows 多文件编译 文章目录g windows 多文件编译Examplescenario 1scenario 2方法一 使用 先编译&#xff0c;再连接方法二 直接编译 生成结果文件visual code 配置 tasks.json问题 undefined reference to std::__cxx11::basic_string<char, std::charg编译单个文件时&…

Java基础:线程池

第一章 等待唤醒机制 1.1 线程间通信 概念&#xff1a;多个线程在处理同一个资源&#xff0c;但是处理的动作&#xff08;线程的任务&#xff09;却不相同。 比如&#xff1a;线程A用来生成包子的&#xff0c;线程B用来吃包子的&#xff0c;包子可以理解为同一资源&#xff…