当前位置: 首页 > news >正文

GDPU Andriod移动应用 Broadcast Receiver

聆听广播,跟着节拍吧。

计时器

新建一个名为PhoneStateMonitor的工程;

实现一个应用运行时长的计时器,并在界面上刷新计数器,要求包括:

(1)在Layout中包含两个TextView控件,横向分布,左边的TextView固定显示文本“运行时长”,右边的TextView显示计时时长(单位:分钟)

(2)通过静态方式注册系统广播android.intent.action.TIME_TICK,执行计时器的刷新。

注,本次可以不用重名原来自带的xml跟main活动,然后记得每题分模块写即可。

<?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="horizontal"android:padding="16dp"android:gravity="center_vertical"><!-- 左侧 TextView 显示 "运行时长" --><TextViewandroid:id="@+id/textViewLabel"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="运行时长"android:textSize="20sp"android:layout_marginEnd="16dp"/><!-- 右侧 TextView 显示计时时长 --><TextViewandroid:id="@+id/textViewTimer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="0"android:textSize="20sp"android:gravity="end"/></LinearLayout>

这里的Receiver内部类写在主活动里,当然你也可以另外写多一个Receiver文件。 

package com.example.phonestatemonitorimport android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.widget.TextViewclass MainActivity : Activity() {// 定义广播接收器,接收系统时间更新广播private lateinit var timeTickReceiver: TimeTickReceiveroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 获取布局中的 TextView 控件val textViewTimer: TextView = findViewById(R.id.textViewTimer)// 创建 TimeTickReceiver 实例并传递 textViewTimertimeTickReceiver = TimeTickReceiver(textViewTimer)// 注册系统广播val intentFilter = IntentFilter()
//        intentFilter.addAction("android.intent.action.TIME_TICK")intentFilter.addAction(Intent.ACTION_TIME_TICK)// 使用系统时间更新广播的正确 actionregisterReceiver(timeTickReceiver, intentFilter)}override fun onDestroy() {super.onDestroy()// 注销广播接收器,避免内存泄漏unregisterReceiver(timeTickReceiver)}// 广播接收器类class TimeTickReceiver(private val textViewTimer: TextView) : BroadcastReceiver() {private var totalMinutes: Int = 0override fun onReceive(context: Context, intent: Intent) {// 更新计时器updateTimer()}private fun updateTimer() {totalMinutes += 1val timeString = String.format("%02d分钟", totalMinutes)// 更新 TextView 显示的计时textViewTimer.text = timeString}}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.phonestatemonitor"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.T7"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

 

手机WIFI状态显示

 实现手机WI-FI状态显示:

(1)WI-FI只有“打开”和“关闭”两种状态;

(2)Layout中根据自己的想法设计合理的WI-FI状态显示方式;

(3)注意,要在AndroiManifest.xml添加wifi状态的权限,

(4)设计一个广播接收器来监听广播android.net.wifi.WIFI_STATE_CHANGED

(5)创建一个私有方法wifiStateUpdate(),里面包括:

创建一个wifiManager:

val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager

获取WI-FI的状态:

val wifiState = wifiManager.wifiState

如果wifiState为WifiManager.WIFI_STATE_ENABLED,则显示“打开”,如果为wifiState为WifiManager.WIFI_STATE_DISABLED,则显示“关闭”。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"android:elevation="4dp"android:theme="@style/ThemeOverlay.AppCompat.ActionBar" /><TextViewandroid:id="@+id/statusWifi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/status_wifi_open"android:layout_gravity="center"android:layout_marginTop="50dp"android:textSize="30sp"android:textColor="#EF9DB9" />
</LinearLayout>

在res的values文件下找到strings.xml

<resources><string name="app_name">T7</string><string name="status_wifi_open">Wifi已打开</string><string name="status_wifi_close">Wifi已关闭</string>
</resources>

在另一个模块或项目的模块,直接用默认的活动写即可。 

import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.wifi.WifiManager
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import androidx.appcompat.widget.Toolbar
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {// 定义广播接收器,接收 Wi-Fi 状态更新广播private lateinit var wifiReceiver: WifiReceiver// 用于显示 Wi-Fi 状态的 TextView 控件private lateinit var wifiStatus: TextViewprivate lateinit var wifiManager: WifiManageroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)
//        val toolbar: Toolbar = findViewById(R.id.toolbar)
//        setSupportActionBar(toolbar)// 获取布局中的 TextView 控件wifiStatus = findViewById(R.id.statusWifi)wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager// 创建 wifiReceiver 实例wifiReceiver = WifiReceiver(wifiStatus)// 注册 Wi-Fi 状态广播接收器val intentFilter = IntentFilter()intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION) // Wi-Fi 状态变化的广播registerReceiver(wifiReceiver, intentFilter)}override fun onDestroy() {super.onDestroy()// 注销广播接收器,避免内存泄漏unregisterReceiver(wifiReceiver)}// 广播接收器类,用于监听 Wi-Fi 状态变化class WifiReceiver(private val statusWifi: TextView) : BroadcastReceiver() {private lateinit var wifiManager: WifiManageroverride fun onReceive(context: Context?, intent: Intent?) {// 获取 WifiManager 实例wifiManager = context?.applicationContext?.getSystemService(Context.WIFI_SERVICE) as WifiManager// 更新 Wifi 状态wifiStateUpdate()}private fun wifiStateUpdate() {// 获取当前的 Wifi 状态val wifiState = wifiManager.wifiStateval context = statusWifi.context// 根据 Wifi 状态更新 UIif (wifiState == WifiManager.WIFI_STATE_ENABLED) {// Wifi 已开启statusWifi.text = context.getString(R.string.status_wifi_open)} else if (wifiState == WifiManager.WIFI_STATE_DISABLED) {// Wifi 已关闭statusWifi.text = context.getString(R.string.status_wifi_close)}statusWifi.invalidate()}}
}

AndroidManifest.xml,注意这里要改一下跟你的项目模块名对上,别直接复制还倒打一耙怪到这来。 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.t7" ><!-- Wi-Fi 状态权限 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.T7" ><activityandroid:name=".MainActivity"android:exported="true" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

打开虚拟手机的设置找到wifi项把它打开关闭,也可以从上面拉下来开启,类似平时用手机打开wifi的,然后观察界面显示。

 

手机电池电量提醒

 实现手机电池电量提醒

(1)要求能够按百分比显示电量;

(2)监听电量变化的广播

android.intent.action.BATTERY_LOW、android.intent.action.BATTERY_OKAY、android.intent.action.BATTERY_CHANGED三条信息;

(3)正常电量下,显示“正常电量”,同时计算并显示具体电量。

(4)当电量电量低于20%时,用红色字体显示电量,并且显示文本“请及时充电!”

(5)计算电量batteryPct。

<?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"android:padding="16dp"><!-- 第一个 TextView: 显示文本1 --><TextViewandroid:id="@+id/textViewText1"android:layout_width="wrap_content"android:layout_height="50sp"android:text="@string/text1"android:textSize="30sp"android:gravity="start"/><!-- 第二个 TextView: 显示电池百分比 --><TextViewandroid:id="@+id/textViewBattery"android:layout_width="wrap_content"android:layout_height="47sp"android:text="@string/battery_percentage"android:textSize="30sp"android:layout_toEndOf="@id/textViewText1"android:layout_marginStart="4dp"android:layout_marginTop="3sp"android:gravity="end" /><!-- 一个黑色横向 View --><Viewandroid:layout_width="match_parent"android:layout_height="2dp"android:layout_below="@id/textViewText1"android:layout_alignParentStart="true"android:background="@color/black" /><!-- 第三个 TextView: 显示电池提示信息 --><TextViewandroid:id="@+id/textViewTips"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/battery_normal_tips"android:textSize="40sp"android:gravity="center"android:layout_below="@id/textViewText1"android:layout_marginTop="20dp" /></RelativeLayout>
<resources><string name="app_name">Pct</string><string name="text1">手机电量:</string><string name="battery_percentage">100%</string><string name="battery_normal_tips">正常电量</string><string name="battery_charge_tips">请及时充电!</string>
</resources>
import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.os.BatteryManager
import android.widget.TextView
import android.widget.Toastclass MainActivity : Activity() {private lateinit var batteryLevel: TextViewprivate lateinit var batteryTips: TextViewprivate lateinit var batteryReceiver: BroadcastReceiveroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 获取布局中的 TextView 控件batteryLevel = findViewById(R.id.textViewBattery)batteryTips = findViewById(R.id.textViewTips)// 创建并注册广播接收器batteryReceiver = BatteryReceiver()val intentFilter = IntentFilter()intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED) // 电池变化intentFilter.addAction(Intent.ACTION_BATTERY_LOW)     // 电池低电量intentFilter.addAction(Intent.ACTION_BATTERY_OKAY)    // 电池恢复正常registerReceiver(batteryReceiver, intentFilter)}override fun onDestroy() {super.onDestroy()// 注销广播接收器unregisterReceiver(batteryReceiver)}// 广播接收器类:处理电池变化的逻辑inner class BatteryReceiver : BroadcastReceiver() {override fun onReceive(context: Context?, intent: Intent?) {intent?.let {when (it.action) {Intent.ACTION_BATTERY_CHANGED -> {val batteryPct:Float? = getBatteryPercentage(it)// 更新电池百分比显示batteryPct?.let { pct ->updateBatteryStatus(pct)}}Intent.ACTION_BATTERY_LOW -> {// 电池电量过低时显示提示信息batteryTips.text = context?.getString(R.string.battery_charge_tips)batteryTips.setTextColor(context?.resources?.getColor(android.R.color.holo_red_dark) ?: 0)}Intent.ACTION_BATTERY_OKAY -> {// 电池恢复正常时显示提示信息batteryTips.text = context?.getString(R.string.battery_normal_tips)batteryTips.setTextColor(context?.resources?.getColor(android.R.color.black) ?: 0)}else -> {}}}}// 获取电池百分比private fun getBatteryPercentage(intent: Intent): Float {val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)val scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)return level * 100 / scale.toFloat()}// 更新电池状态private fun updateBatteryStatus(batteryPct: Float) {batteryLevel.text = "${batteryPct.toInt()}%" // 显示电池百分比if (batteryPct < 20) {batteryTips.text = "请及时充电!"batteryTips.setTextColor(getColor(android.R.color.holo_red_dark))} else {// 电量正常时,显示“正常电量”batteryTips.text = "正常电量"batteryTips.setTextColor(getColor(android.R.color.black))}}}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.pct"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.T7"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

怎么调节虚拟机的电量观察提示变化,点击这里。

然后滑动滑条即可观察到提示变化。 

 

实验心得

写到困了,却等不到的赞。 

 

相关文章:

GDPU Andriod移动应用 Broadcast Receiver

聆听广播&#xff0c;跟着节拍吧。 计时器 新建一个名为PhoneStateMonitor的工程&#xff1b; 实现一个应用运行时长的计时器&#xff0c;并在界面上刷新计数器&#xff0c;要求包括&#xff1a; &#xff08;1&#xff09;在Layout中包含两个TextView控件&#xff0c;横向分…...

CSP/信奥赛C++刷题训练:经典例题 - 栈(1):洛谷P3056 :[USACO12NOV] Clumsy Cows S

CSP/信奥赛C刷题训练&#xff1a;经典例题 - 栈&#xff08;1&#xff09;&#xff1a;洛谷P3056 &#xff1a;[USACO12NOV] Clumsy Cows S 题目描述 Bessie the cow is trying to type a balanced string of parentheses into her new laptop, but she is sufficiently clums…...

WiFi一直获取不到IP地址是怎么回事?

在当今这个信息化时代&#xff0c;WiFi已成为我们日常生活中不可或缺的一部分。无论是家庭、办公室还是公共场所&#xff0c;WiFi都为我们提供了便捷的无线互联网接入。然而&#xff0c;有时我们可能会遇到WiFi连接后无法获取IP地址的问题&#xff0c;这不仅影响了我们的网络使…...

蓝牙BLE开发——iOS 每次写入数据超过200字节报错?

iOS 写入数据超过200字节报错 文章目录 iOS 写入数据超过200字节报错官方建议&#xff1a;报错问题解决 writeblecharacteristicvalue 官方建议&#xff1a; 并行调用多次会存在写失败的可能性。APP不会对写入数据包大小做限制&#xff0c;但系统与蓝牙设备会限制蓝牙4.0单次…...

Ascend Extension for PyTorch是个what?

1 Ascend Extension for PyTorch Ascend Extension for PyTorch 插件是基于昇腾的深度学习适配框架&#xff0c;使昇腾NPU可以支持PyTorch框架&#xff0c;为PyTorch框架的使用者提供昇腾AI处理器的超强算力。 项目源码地址请参见Ascend/Pytorch。 昇腾为基于昇腾处理器和软…...

学习docker第五弹-----高级篇start-Dockerfile

docker目录 1 Dockerfile是什么2 Dockerfile能干嘛3 如何书写Dockerfile3.1 Dockerfile构建过程解析3.2 小总结3.3 Dockerfile的基本知识3.5 保留字FROMMAINTAINERRUN 有两种方式EXPOSEWORKDIRENVUSERVOLUMEADDCMDENTRYPOINT 4 后记 1 Dockerfile是什么 Dockerfile顾名思义就是…...

【Elasticsearch】Elasticsearch集成Spring Boot

Elasticsearch集成Spring Boot 概述 Spring Data Elasticsearch 介绍一、环境初始化二、实战入门1、定义数据实体类2、定义Dao层3、框架集成-SpringData-集成测试-索引操作4、框架集成-SpringData-集成测试-文档操作5、框架集成-SpringData-集成测试-文档搜索 概述 Spring Data…...

HarmonyOS 移

什么是HarmonyOS HarmonyOS 中文名字是 鸿蒙操作系统 中国神话传说盘古在昆仑山开天辟地之前&#xff0c;世界是一团混沌状的元气&#xff0c;这种自然的元气叫做鸿蒙&#xff0c;那个时代成为鸿蒙时代华为公司的操作系统以鸿蒙取名&#xff0c;是不是有开天辟地之寓意&#x…...

跨子网的WinCC客户机/服务器如何实现通讯?

为了更有效地利用有限的IP地址&#xff0c;为了减少广播对网络带宽的占用从而提高带宽&#xff0c;为了实现在不同子网中应用不同的安全策略从而提高网络安全性&#xff0c;现场通常要求划分子网&#xff0c;将安全等级要求不同的计算机安置在不同的子网中&#xff0c;分开管理…...

java 面向对象高级

1.final关键字 class Demo{public static void main(String[] args) {final int[] anew int[]{1,2,3};// anew int[]{4,5,6}; 报错a[0]5;//可以&#xff0c;解释了final修饰引用性变量&#xff0c;变量存储的地址不能被改变&#xff0c;但地址所指向的对象的内容可以改变} }什…...

递推经典例题 - 爬楼梯

一、题目阅读 题目描述 一段楼梯有n级台阶。你每次可以跨一个、两个或者三个台阶。 请问走上n级台阶有几种方案&#xff1f;答案对998244353取模。 输入格式 一行一个数n。 输出格式 一行一个数&#xff0c;表示方案数。 样例 Input 1 3 Output 1 4 样例解释 1 1 1 3 1 2 …...

OpenCV视觉分析之目标跟踪(12)找到局部的最大值函数meanShift()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在反向投影图像上找到一个对象。 meanShift 是一种用于图像处理和计算机视觉领域的算法&#xff0c;特别适用于目标跟踪、图像分割等任务。该算…...

《数据治理精选案例集2.0(2024版)》592页PDF(已授权分享)

《亿信华辰数据治理精选案例集2.0》是北京亿信华辰软件有限责任公司倾力打造的专业数据治理案例集&#xff0c;汇集了100个一线政企数据治理实践案例&#xff0c;覆盖13大行业和500业务场景&#xff0c;通过深入剖析数据治理难题&#xff0c;提供了新思路和实战经验&#xff0c…...

【51单片机】LED点阵屏 原理 + 使用

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 LED点阵屏显示原理74HC595 编码LED点阵屏显示笑脸LED点阵屏显示动画 LED点阵屏 点阵屏在开发板的右上角&#xff0c;注意使用前需要…...

Java基于SpringBoot+Vue的宠物共享平台的设计与实现(附源码,文档)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

【案例】Excel使用宏来批量插入图片

一、场景介绍 我有一个excel文件&#xff0c;需要通过一列的文件名称&#xff0c;按照规则给批量上传图片附件。 原始文件&#xff1a; 成功后文件&#xff1a; 二、实现方法 1. 使用【wps】工具打开Excel文件&#xff0c;将其保存为启用宏的文件。 2.找到编辑宏的【VB编辑器…...

报名开启|开放原子大赛“Rust数据结构与算法学习赛”

开放原子大赛“Rust数据结构与算法学习赛”报名进行中&#xff0c;报名截止时间为11月17日。 为了进一步促进开源技术的发展&#xff0c;提升国内开源社区的创新能力和国际影响力&#xff0c;开放原子开源基金会与清华大学开源操作系统训练营等单位&#xff0c;共同举办本次Rus…...

[翻译] 创始人模式(Founder Mode)

Founder Mode 上周在一次YC活动中&#xff0c;Brian Chesky发表了一场在场的每个人都难以忘怀的演讲。会后&#xff0c;我与大多数创始人交流时&#xff0c;他们都表示这是他们听过的最好的演讲。连Ron Conway也第一次忘记了记笔记。我不会试图在这里复述演讲内容&#xff0c;…...

拓扑排序(C++类封装+数组模拟队列和邻接表)

拓扑序列 对于任何无回路的AOV网&#xff0c;其顶点均可排成拓扑序列&#xff0c;并且其拓扑序列未必唯一。步骤如下&#xff1a; 1.从网中选择一个入度为0的顶点且输出。 2.从网中删除该顶点及其所有出边。 3.执行1&#xff0c;2&#xff0c;直至所有顶点已输出&#xff0…...

FP独立站引流革命:GG斗篷技术解锁流量新策略

在跨境电商领域&#xff0c;FP独立站的运营者们面临着一个共同的挑战&#xff1a;如何在遵守平台规则的同时&#xff0c;有效地吸引和保持流量。传统的引流方法如SEM、SEO、邮件推广和社交媒体营销&#xff0c;对于FP独立站来说&#xff0c;往往效果有限。但现在&#xff0c;一…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...