29.HarmonyOS App(JAVA)通知

 

普通通知:

 

通知渠道,弹出消息后,自动消失

长文本通知

//多行文本通知

//图片通知

//社交通知

//媒体通知--经测试,图片无法显示,文字不显示

场景介绍

HarmonyOS提供了通知功能,即在一个应用的UI界面之外显示的消息,主要用来提醒用户有来自该应用中的信息。当应用向系统发出通知时,它将先以图标的形式显示在通知栏中,用户可以下拉通知栏查看通知的详细信息。常见的使用场景:

  • 显示接收到短消息、即时消息等。
  • 显示应用的推送消息,如广告、版本更新等。
  • 显示当前正在进行的事件,如播放音乐、导航、下载等。

接口说明

通知相关基础类包含NotificationSlot、NotificationRequest和NotificationHelper。基础类之间的关系如下所示:

图1 通知基础类关系图

  • NotificationSlot

    NotificationSlot可以对提示音、振动、重要级别等进行设置。一个应用可以创建一个或多个NotificationSlot,在发布通知时,通过绑定不同的NotificationSlot,实现不同用途。

    说明

    NotificationSlot需要先通过NotificationHelper的addNotificationSlot(NotificationSlot)方法发布后,通知才能绑定使用;所有绑定该NotificationSlot的通知在发布后都具备相应的特性,对象在创建后,将无法更改这些设置,对于是否启动相应设置,用户有最终控制权。

    不指定NotificationSlot时,当前通知会使用默认的NotificationSlot,默认的NotificationSlot优先级为LEVEL_DEFAULT。

    表1 NotificationSlot主要接口

    接口名

    描述

    NotificationSlot(String id, String name, int level)

    构造NotificationSlot。

    setLevel(int level)

    设置NotificationSlot的级别。

    setName(String name)

    设置NotificationSlot的命名。

    setDescription(String description)

    设置NotificationSlot的描述信息。

    enableBypassDnd(boolean bypassDnd)

    设置是否绕过系统的免打扰模式。

    setEnableVibration(boolean vibration)

    设置收到通知时是否使能振动。

    setEnableLight(boolean isLightEnabled)

    设置收到通知时是否开启呼吸灯,前提是当前硬件支持呼吸灯。

    setLedLightColor(int color)

    设置收到通知时的呼吸灯颜色。

    setSlotGroup(String groupId)

    绑定当前NotificationSlot到一个NotificationSlot组。

    NotificationSlot的级别目前支持如下几种, 由低到高:
    • LEVEL_NONE: 表示通知不发布。
    • LEVEL_MIN:表示通知可以发布,但不在状态栏显示,不自动弹出,无提示音;该级别不适用于前台服务的场景。
    • LEVEL_LOW:表示通知发布后在状态栏显示,不自动弹出,无提示音。
    • LEVEL_DEFAULT:表示通知发布后在状态栏显示,不自动弹出,触发提示音。
    • LEVEL_HIGH:表示通知发布后在状态栏显示,自动弹出,触发提示音。
  • NotificationRequest

    NotificationRequest用于设置具体的通知对象,包括设置通知的属性,如:通知的分发时间、小图标、大图标、自动删除等参数,以及设置具体的通知类型,如普通文本、长文本等。

    表2 NotificationRequest主要接口

    接口名

    描述

    NotificationRequest()

    构建一个通知。

    NotificationRequest(int notificationId)

    构建一个通知,指定通知的id。通知的Id在应用内具有唯一性,如果不指定,默认为0。

    setNotificationId​(int notificationId)

    设置当前通知id。

    setAutoDeletedTime​(long time)

    设置通知自动取消的时间戳。

    setContent​(NotificationRequest.NotificationContent content)

    设置通知的具体内容。

    setDeliveryTime​(long deliveryTime)

    设置通知分发的时间戳。

    setSlotId(String slotId)

    设置通知的NotificationSlot id。

    setTapDismissed​(boolean tapDismissed)

    设置通知在用户点击后是否自动取消。

    setLittleIcon​(PixelMap smallIcon)

    设置通知的小图标,在通知左上角显示。

    setBigIcon(PixelMap bigIcon)

    设置通知的大图标,在通知的右边显示。

    setGroupValue(String groupValue)

    设置分组通知,相同分组的通知在通知栏显示时,将会折叠在一组应用中显示。

    addActionButton(NotificationActionButton actionButton)

    设置通知添加通知ActionButton。

    setIntentAgent(IntentAgent agent)

    设置通知承载指定的IntentAgent,在通知中实现即将触发的事件。

    具体的通知类型:目前支持六种类型,包括普通文本NotificationNormalContent、长文本NotificationLongTextContent、图片NotificationPictureContent、多行NotificationMultiLineContent、社交NotificationConversationalContent、媒体NotificationMediaContent。
    表3 通知类型的主要接口

    类名

    接口名

    描述

    NotificationNormalContent

    setTitle(String title)

    设置通知标题。

    NotificationNormalContent

    setText​(String text)

    设置通知内容。

    NotificationNormalContent

    setAdditionalText(String additionalText)

    设置通知次要内容,是对通知内容的补充。

    NotificationPictureContent

    setBriefText(String briefText)

    设置通知概要内容,是对通知内容的总结。

    NotificationPictureContent

    setExpandedTitle(String expandedTitle)

    设置附加图片的通知展开时的标题。

    NotificationPictureContent

    setBigPicture(PixelMap bigPicture)

    设置通知的图片内容,附加在setText​(String text)下方。

    NotificationLongTextContent

    setLongText​(String longText)

    设置通知的长文本。

    NotificationConversationalContent

    setConversationTitle(String conversationTitle)

    设置社交通知的标题。

    NotificationConversationalContent

    addConversationalMessage(ConversationalMessage message)

    通知添加一条消息。

    NotificationMultiLineContent

    addSingleLine(String line)

    在当前通知中添加一行文本。

    NotificationMediaContent

    setAVToken(AVToken avToken)

    将媒体通知绑定指定的AVToken。

    NotificationMediaContent

    setShownActions(int[] actions)

    设置媒体通知待展示的按钮。

    说明

    通知发布后,通知的设置不可修改。如果下次发布通知使用相同的id,就会更新之前发布的通知。

  • NotificationHelperNotificationHelper封装了发布、更新、删除通知等静态方法。
    表4 NotificationHelper主要接口

    接口名

    描述

    publishNotification(NotificationRequest request)

    发布一条通知。

    publishNotification(String tag, NotificationRequest request)

    发布一条带TAG的通知。

    cancelNotification(int notificationId)

    取消指定的通知。

    cancelNotification(String tag, int notificationId)

    取消指定的带TAG的通知。

    cancelAllNotifications()

    取消之前发布的所有通知。

    addNotificationSlot(NotificationSlot slot)

    创建一个NotificationSlot。

    getNotificationSlot(String slotId)

    获取NotificationSlot。

    removeNotificationSlot(String slotId)

    删除一个NotificationSlot。

    getActiveNotifications()

    获取当前应用发的活跃通知。

    getActiveNotificationNums()

    获取系统中当前应用发的活跃通知的数量。

    setNotificationBadgeNum(int num)

    设置通知的角标。

    setNotificationBadgeNum()

    设置当前应用中活跃状态通知的数量在角标显示。

开发步骤

通知的开发指导分为创建NotificationSlot、发布通知和取消通知等开发场景。

创建NotificationSlot

NotificationSlot可以设置公共通知的震动,重要级别等,并通过调用NotificationHelper.addNotificationSlot()发布NotificationSlot对象。

 
  1. NotificationSlot slot = new NotificationSlot("slot_001", "slot_default", NotificationSlot.LEVEL_MIN); // 创建notificationSlot对象
  2. slot.setDescription("NotificationSlotDescription");
  3. slot.setEnableVibration(true); // 设置振动提醒
  4. slot.setEnableLight(true); // 设置开启呼吸灯提醒
  5. slot.setLedLightColor(Color.RED.getValue());// 设置呼吸灯的提醒颜色
  6. try {
  7. NotificationHelper.addNotificationSlot(slot);
  8. } catch (RemoteException ex) {
  9. HiLog.error(LABEL, "Exception occurred during addNotificationSlot invocation.");
  10. }

发布通知

  1. 构建NotificationRequest对象,应用发布通知前,通过NotificationRequest的setSlotId()方法与NotificationSlot绑定,使该通知在发布后都具备该对象的特征。
     
    1. int notificationId = 1;
    2. NotificationRequest request = new NotificationRequest(notificationId);
    3. request.setSlotId(slot.getId());
  2. 调用setContent()设置通知的内容。
     
    1. String title = "title";
    2. String text = "There is a normal notification content.";
    3. NotificationNormalContent content = new NotificationNormalContent();
    4. content.setTitle(title)
    5. .setText(text);
    6. NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(content);
    7. request.setContent(notificationContent); // 设置通知的内容
  3. 调用publishNotification()发布通知。
     
    1. try {
    2. NotificationHelper.publishNotification(request);
    3. } catch (RemoteException ex) {
    4. HiLog.error(LABEL, "Exception occurred during publishNotification invocation.");
    5. }

 

显示另外一个页面。

 

 

MainAbilitySlice.java 

package com.example.myapplication.slice;import com.example.myapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.render.opengl.Utils;
import ohos.agp.utils.Color;
import ohos.agp.utils.LayoutAlignment;
import ohos.agp.window.dialog.ToastDialog;
import ohos.event.intentagent.IntentAgent;
import ohos.event.intentagent.IntentAgentConstant;
import ohos.event.intentagent.IntentAgentHelper;
import ohos.event.intentagent.IntentAgentInfo;
import ohos.event.notification.*;
import ohos.global.resource.NotExistException;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.media.image.ImageSource;
import ohos.media.image.PixelMap;
import ohos.media.image.common.PixelFormat;
import ohos.media.image.common.Rect;
import ohos.media.image.common.Size;
import ohos.miscservices.timeutility.Time;
import ohos.rpc.RemoteException;import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.Date;
import java.util.List;public class MainAbilitySlice extends AbilitySlice {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);Button btn1 = (Button) findComponentById(ResourceTable.Id_btn1);btn1.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {ShowNoti1();}});Button btn2 = (Button) findComponentById(ResourceTable.Id_btn2);btn2.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {IntentAgent agent = createOpenThisAbilityIntentAgent1();NotificationRequest.NotificationNormalContent content = new NotificationRequest.NotificationNormalContent().setTitle("notification test").setText("单击打开PageAbility页面");//创建页面方法,参考这里。https://txwtech.blog.csdn.net/article/details/135095068NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(content);NotificationRequest request = new NotificationRequest(1002).setContent(notificationContent).setIntentAgent(agent);try{NotificationHelper.publishNotification(request);}catch (Exception ex){}}});//创建通知渠道NotificationSlot slot = new NotificationSlot("slot1","一般性通知",NotificationSlot.LEVEL_DEFAULT);slot.setDescription("一般性通知");NotificationSlot slot2 = new NotificationSlot("slot2","特别重要通知",NotificationSlot.LEVEL_HIGH);slot2.setDescription("特别重要通知");//震动提醒slot2.setEnableVibration(true);//锁屏通知slot2.setLockscreenVisibleness(NotificationRequest.VISIBLENESS_TYPE_PUBLIC);//跳过免打扰模式slot2.enableBypassDnd(true);//开启呼吸灯提醒slot2.setEnableLight(true);//设置呼吸灯的提醒颜色slot2.setLedLightColor(Color.RED.getValue());try{NotificationHelper.addNotificationSlot(slot);NotificationHelper.addNotificationSlot(slot2);}catch (RemoteException e){//加入通知渠道失败ToastDialog toastDialog = new ToastDialog(this);toastDialog.setTransparent(true).setDuration(2000).setAlignment(LayoutAlignment.BOTTOM+LayoutAlignment.HORIZONTAL_CENTER).setOffset(0,200)//距离底边距离.show();}Button button_qudao = (Button) findComponentById(ResourceTable.Id_btn3_qudao);button_qudao.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {QudaoNotification();}});Button button_long_text = (Button) findComponentById(ResourceTable.Id_btn4_long_text);button_long_text.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {LongTextNotification();}});Button button_duohang = (Button) findComponentById(ResourceTable.Id_btn5_duohang);button_duohang.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {MultiTextNotification();}});Button button_pic = (Button) findComponentById(ResourceTable.Id_btn3_picture);button_pic.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {PictureNotification();}});Button button_social = (Button) findComponentById(ResourceTable.Id_btn4_social);button_social.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {SocialNotification();}});Button button_media = (Button) findComponentById(ResourceTable.Id_btn5_media);button_media.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {MediaNotification();}});}public void ShowNoti1(){NotificationRequest.NotificationNormalContent content = new NotificationRequest.NotificationNormalContent().setTitle("标题Title").setText("内容Text").setAdditionalText("次要内容");//创建notificationContent通知内容对象NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(content);//创建notificationRequest通知请求对象NotificationRequest request = new NotificationRequest(1001).setContent(notificationContent);try{//发布通知NotificationHelper.publishNotification(request);}catch (RemoteException ex){HiLog.info(new HiLogLabel(1,1,null),"aa");}}//创建方法private IntentAgent createOpenThisAbilityIntentAgent1(){//创建打开ablity的Itent对象Operation operation = new Intent.OperationBuilder().withDeviceId("").withBundleName("com.example.myapplication").withAbilityName("com.example.myapplication.PageAbility").build();Intent intent = new Intent();intent.setOperation(operation);//将Intent对象添加到List<intent>对象中List<Intent> intents = new ArrayList<>();intents.add(intent);//创建flags对象List<IntentAgentConstant.Flags> flags = new ArrayList<>();flags.add(IntentAgentConstant.Flags.ONE_TIME_FLAG);//创建启动Ability的ItentAgentInfo对象IntentAgentInfo info = new IntentAgentInfo(200,IntentAgentConstant.OperationType.START_ABILITIES,flags,intents,null);//通过IntentAgentHelper创建IntentAgent对象IntentAgent agent = IntentAgentHelper.getIntentAgent(this,info);return agent;}//通知渠道public void QudaoNotification(){//普通文本通知内容NotificationRequest.NotificationNormalContent content = new NotificationRequest.NotificationNormalContent().setTitle("重要通知").setText("雨天路滑,注意安全");//创建notificationContent通知内容对象NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(content);NotificationRequest request = new NotificationRequest(1003).setContent(notificationContent).setSlotId("slot2");try{//发布通知NotificationHelper.publishNotification(request);}catch (RemoteException e){}}/*长文本通知*/public void LongTextNotification(){NotificationRequest.NotificationLongTextContent content = new NotificationRequest.NotificationLongTextContent();content.setTitle("标题title").setExpandedTitle("扩展标题expandedtitle").setAdditionalText("额外内容addtitionalText").setLongText("长文本,longtext,longtext");//创建通知内容对象NotificationRequest.NotificationContent notificationContent= new NotificationRequest.NotificationContent(content);//创建通知请求对象NotificationRequest request = new NotificationRequest(1004).setContent(notificationContent);try{//发布通知NotificationHelper.publishNotification(request);}catch (RemoteException ex){}}//多行文本通知public void MultiTextNotification(){NotificationRequest.NotificationMultiLineContent multiLineContent = new NotificationRequest.NotificationMultiLineContent();multiLineContent.setTitle("多行文本").setText("内容text").setExpandedTitle("扩展标题").addSingleLine("行1内容").addSingleLine("行2内容").addSingleLine("行3内容");NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(multiLineContent);NotificationRequest notificationRequest = new NotificationRequest(1005);notificationRequest.setContent(notificationContent);try{NotificationHelper.publishNotification(notificationRequest);}catch (RemoteException ex){}}//图片通知public void PictureNotification(){NotificationRequest.NotificationPictureContent notificationPictureContent = new NotificationRequest.NotificationPictureContent();notificationPictureContent.setTitle("图片标题-荷花").setText("内容。。。").setBriefText("春天来了,天气不错,记得晒太阳哦").setExpandedTitle("温馨提示").setBigPicture(getPixelMap((ResourceTable.Media_hehua)));NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(notificationPictureContent);NotificationRequest request = new NotificationRequest(1006);request.setContent(notificationContent);try{NotificationHelper.publishNotification(request);}catch (RemoteException ex){}}//图片通知private PixelMap getPixelMap(int drawableId){InputStream drawableInputStream = null;try{drawableInputStream = getResourceManager().getResource(drawableId);ImageSource.SourceOptions sourceOptions = new ImageSource.SourceOptions();sourceOptions.formatHint="image/png";ImageSource imageSource = ImageSource.create(drawableInputStream,sourceOptions);ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions();decodingOptions.desiredSize = new Size(0,0);decodingOptions.desiredRegion = new Rect(0,0,0,0);decodingOptions.desiredPixelFormat = PixelFormat.ARGB_8888;PixelMap pixelMap = imageSource.createPixelmap(decodingOptions);return pixelMap;}catch (Exception ex){ex.printStackTrace();}finally {try{if(drawableInputStream!=null){drawableInputStream.close();}}catch (Exception e){e.printStackTrace();}}return null;}//社交通知private void SocialNotification(){MessageUser user1 = new MessageUser();user1.setName("张大天");user1.setPixelMap(getPixelMap(ResourceTable.Media_dog1));MessageUser user2 = new MessageUser();user2.setName("小明");user2.setPixelMap(getPixelMap(ResourceTable.Media_rabit));//社交通知内容NotificationRequest.NotificationConversationalContent notificationConversationalContent = new NotificationRequest.NotificationConversationalContent(user1);notificationConversationalContent.setConversationTitle("即时消息").addConversationalMessage(new NotificationRequest.NotificationConversationalContent.ConversationalMessage("您好", Time.getCurrentTime(),user1)).addConversationalMessage(new NotificationRequest.NotificationConversationalContent.ConversationalMessage("在哦,您好",Time.getCurrentTime(),user2));NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(notificationConversationalContent);NotificationRequest notificationRequest = new NotificationRequest(1007);notificationRequest.setContent(notificationContent);try{NotificationHelper.publishNotification(notificationRequest);}catch (RemoteException ex){}}//媒体通知--经测试,图片无法显示,文字不显示private void MediaNotification(){NotificationRequest.NotificationMediaContent content = new NotificationRequest.NotificationMediaContent();content.setTitle("标题title").setText("媒体通知--内容text").setAdditionalText("额外内容").setShownActions(new int[]{0});//定义3个按钮NotificationActionButton btn1 = new NotificationActionButton.Builder(getPixelMap(ResourceTable.Media_play),"开始",null).build();NotificationActionButton btn2 = new NotificationActionButton.Builder(getPixelMap(ResourceTable.Media_heart),"喜欢",null).build();NotificationActionButton btn3 = new NotificationActionButton.Builder(getPixelMap(ResourceTable.Media_start),"收藏",null).build();NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(content);NotificationRequest notificationRequest = new NotificationRequest(1008).setContent(notificationContent).addActionButton(btn1).addActionButton(btn2).addActionButton(btn3);try{NotificationHelper.publishNotification(notificationRequest);}catch (RemoteException ex){}}@Overridepublic void onActive() {super.onActive();}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);}
}

 项目工程代码:

待更新。。。

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

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

相关文章

C++之结构体以及通讯录管理系统

1&#xff0c;结构体基本概念 结构体属于自定义的数据概念&#xff0c;允许用户存储不同的数据类型 2&#xff0c;结构体的定义和使用 语法&#xff1a;struct 结构体名{ 结构体成员列表}&#xff1b; 通过结构体创建变量的方式有三种&#xff1a; 1&#xff0c;struct …

设计模式学习笔记 - 设计原则 - 8.迪米特法则(LOD)

前言 迪米特法则&#xff0c;是一个非常实用的原则。利用这个原则&#xff0c;可以帮我们实现代码的 “高内聚、松耦合”。 围绕下面几个问题&#xff0c;来学习迪米特原则。 什么是 “高内聚、松耦合”&#xff1f;如何利用迪米特法则来实现 高内聚、松耦合&#xff1f;哪些…

技术实践|百度安全「大模型内容安全」高级攻击风险评测

1、引子 2023年10月16日&#xff0c;OWASP发布了《OWASP Top 10 for LLM Applications》&#xff0c;这对于新兴的大语言模型安全领域&#xff0c;可谓一份纲领性的重要报告。 OWASP是开放式Web应用程序安全项目&#xff08;Open Web Application Security Project&#xff0…

【Linux网络命令系列】ping curl telnet三剑客

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【C++】vector的使用和模拟实现(超级详解!!!!)

文章目录 前言1.vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector 空间增长问题1.2.3 vector 增删查改1.2.4 vector 迭代器失效问题。&#xff08;重点!!!!!!&#xff09;1.2.5 vector 在OJ中有关的练习题 2.ve…

C++入门和基础

目录 文章目录 前言 一、C关键字 二、命名空间 2.1 命名空间的定义 2.2 命名空间的使用 2.3 标准命名空间 三、C输入&输出 四、缺省参数 4.1 缺省参数的概念 4.2 缺省参数的分类 五、函数重载 5.1 函数重载的简介 5.2 函数重载的分类 六、引用 6.1 引用的…

搭建个人IC_EDA服务器(物理机)一:安装Centos7

1.准备 大于8G的U盘&#xff1b;待装的电脑&#xff0c;我使用淘汰的在大学时候使用的笔记本&#xff1b;U盘启动器制作工具&#xff1a;UltralSo&#xff1b;官网下载的在没有付费的情况下&#xff0c;即使试用期&#xff0c;安装的时候会有莫名的问题&#xff0c;建议使用这…

【接口测试】常见HTTP面试题

目录 HTTP GET 和 POST 的区别 GET 和 POST 方法都是安全和幂等的吗 接口幂等实现方式 说说 post 请求的几种参数格式是什么样的&#xff1f; HTTP特性 HTTP&#xff08;1.1&#xff09; 的优点有哪些&#xff1f; HTTP&#xff08;1.1&#xff09; 的缺点有哪些&#x…

Puzzles

题目链接&#xff1a;Submit - Codeforces​​​​​​ 解题思路&#xff1a; 题目大概意思就是在一个数组里找n个数里的最大值减最小值的最小值&#xff0c;先排序&#xff0c;然后将第i n - 1项减去第i项与最小值作比较&#xff0c;输出最小值即可&#xff0c;注意循环结束…

YOLOv应用开发与实现

一、背景与简介 YOLO&#xff08;You Only Look Once&#xff09;是一种流行的实时目标检测系统&#xff0c;其核心思想是将目标检测视为回归问题&#xff0c;从而可以在单个网络中进行端到端的训练。YOLOv作为该系列的最新版本&#xff0c;带来了更高的检测精度和更快的处理速…

【框架】MyBatis 框架重点解析

MyBatis 框架重点解析 1. MyBatis 执行流程 会话工厂生产的 SqlSession 对象提供了对数据库执行SQL命令所需的所有方法&#xff0c;包括但不限于以下功能&#xff1a; 数据库操作&#xff1a;SqlSession可以执行查询&#xff08;select&#xff09;、插入&#xff08;insert&a…

腾讯云幻兽帕鲁游戏存档迁移教程,本地单人房迁移/四人世界怎么迁移存档?

腾讯云幻兽帕鲁游戏存档迁移的方法主要包括以下几个步骤&#xff1a; 登录轻量云控制台&#xff1a;首先&#xff0c;需要登录到轻量云控制台&#xff0c;这是进行存档迁移的前提条件。在轻量云控制台中&#xff0c;可以找到接收存档的服务器卡片&#xff0c;并点击进入实例详情…

Jmeter 安装

JMeter是Java的框架&#xff0c;因此在安装Jmeter前需要先安装JDK&#xff0c;此处安装以Windows版为例 1. 安装jdk&#xff1a;Java Downloads | Oracle 安装完成后设置环境变量 将环境变量JAVA_HOME设置为 C:\Program Files\Java\jdk1.7.0_25 在系统变量Path中添加 C:\Pro…

股票技术指标(包含贪婪指数)

股票技术指标是用于分析股票价格和成交量数据&#xff0c;以便预测未来市场走势的工具。技术分析师使用这些指标来识别市场趋势、价格模式、交易信号和投资机会。技术指标通常基于数学公式&#xff0c;并通常在股票价格图表上以图形形式表示。 技术指标主要分为以下几类&#x…

A Brief Introduction of the Tqdm Module in Python

DateAuthorVersionNote2024.02.28Dog TaoV1.0Release the note. 文章目录 A Brief Introduction of the Tqdm Module in PythonIntroductionKey FeaturesInstallation Usage ExamplesBasic UsageAdvanced Usage A Brief Introduction of the Tqdm Module in Python Introducti…

力扣hot100:42.接雨水

什么时候能用双指针&#xff1f; &#xff08;1&#xff09;对撞指针&#xff1a; ①两数和问题中可以使用双指针&#xff0c;先将两数和升序排序&#xff0c;可以发现规律&#xff0c;如果当前两数和大于target&#xff0c;则右指针向左走。 ②接雨水问题中&#xff0c;左边最…

【算法集训】基础算法:枚举

一、基本理解 枚举的概念就是把满足题目条件的所有情况都列举出来&#xff0c;然后一一判定&#xff0c;找到最优解的过程。 枚举虽然看起来麻烦&#xff0c;但是有时效率上比排序高&#xff0c;也是一个不错的方法、 二、最值问题 1、两个数的最值问题 两个数的最小值&…

Vscode安装,ssh插件与配置

原因 发现很多新人在练习linux&#xff0c;可是只有windows机的时候&#xff0c;一般都是下载虚拟机&#xff0c;然后在虚拟机上安装ubuntu等linux平台。每次需要在linux中写代码&#xff0c;就打开ubuntu&#xff0c;然后在终端上用vim写代码&#xff0c;或者先编辑代码文本&…

css实现上下左右居中

css实现子盒子在父级盒子中上下左右居中 几种常用的上下左右居中方式 HTML代码部分 <div class"box"><img src"./img/77.jpeg" alt"" class"img"> </div>css部分 方式一 利用子绝父相和margin:auto实现 <sty…

内存管理 -----分段分页

分段 分段&#xff1a;程序的分段地址空间&#xff0c;分段寻址方案 两个问题 分段 &#xff1a;是更好分离和共享 左边是有序的逻辑地址&#xff0c;右边是无序的物理地址&#xff0c;然后需要有一种映射的关系&#xff08;段关联机制&#xff09; 各个程序的分配相应的地址…