Android Framework定制sim卡插入解锁pin码的界面
文章目录
- 手机设置SIM卡pin码
- 一、安卓手机
- 二、苹果手机
- Android Framework中SIM卡pin码代码
- 定位pin码提示文本位置
- 定位pin码java代码位置
- 定制pin码framework窗口
- 数字按钮
手机设置SIM卡pin码
设置 SIM 卡 PIN 码可以提高手机的安全性,防止他人在未经授权的情况下使用你的 SIM 卡。但请务必牢记你的 PIN 码,因为连续多次输入错误的 PIN 码可能会导致 SIM 卡被锁定,需要使用 PUK 码解锁。如果你忘记了 PIN 码或 PUK 码,应及时联系你的运营商获取帮助。
以下介绍怎么在手机上开启锁定SIM卡并设置pin码。
一、安卓手机
- 打开手机 “设置”。
- 在设置中找到 “安全” 或 “密码与安全” 等选项。
- 点击进入后,查找 “SIM 卡锁定” 或类似名称的选项。
- 进入该选项后,你可能需要输入手机的解锁密码、指纹或面部识别等进行验证。
- 验证通过后,开启 “锁定 SIM 卡” 开关。
- 此时会提示你输入初始的 PIN 码,一般初始 PIN 码为 “1234” 或 “0000”,具体可咨询运营商。输入正确的初始 PIN 码后点击确定。
- 接着你可以设置新的 PIN 码,输入新的 PIN 码并确认。
二、苹果手机
- 打开手机 “设置”。
- 点击 “蜂窝网络”。
- 选择你要设置 PIN 码的 SIM 卡。
- 点击 “SIM 卡 PIN 码”。
- 开启 “SIM 卡 PIN 码” 开关。
- 输入初始 PIN 码(通常为 “1234” 或 “0000”),然后点击 “完成”。
- 设置新的 PIN 码并确认。
Android Framework中SIM卡pin码代码
如图打开SIM卡锁定并后,再插入SIM会弹出窗口,要求输入pin码。重启开机锁屏画面也是显示这个:
可以根据提示文本来定位代码在哪。
定位pin码提示文本位置
find frameworks/base/ -name “*.xml” | xargs grep “请输入 SIM”
frameworks/base/packages/SystemUI/res-unisoc/values-zh-rCN/strings_ex.xml: <item quantity="one">请输入 SIM <xliff:g id="carrier" example="CARD 1">%1$s</xliff:g> PIN,您还可以尝试 <xliff:g id="number">%2$d</xliff:g> 次。如果仍不正确,则需要联系运营商帮您解锁设备。</item>
frameworks/base/packages/SystemUI/res-unisoc/values-zh-rCN/strings_ex.xml: <item quantity="other">请输入 SIM <xliff:g id="carrier" example="CARD 1">%1$s</xliff:g> PIN,您还可以尝试 <xliff:g id="number">%2$d</xliff:g> 次。</item>
frameworks/base/packages/SystemUI/res-unisoc/values-zh-rCN/strings_ex.xml: <string name="kg_simlock_instructions">请输入 SIM LOCK 解锁密码</string>
frameworks/base/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml: <string name="keyguard_password_enter_puk_code" msgid="3813154965969758868">"请输入 SIM 卡 PUK 码和新的 PIN 码"</string>
frameworks/base/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml: <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"请输入 SIM 卡 PIN 码。"</string>
frameworks/base/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml: <item quantity="other">请输入 SIM 卡 PIN 码,您还可以尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item>
frameworks/base/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml: <item quantity="one">请输入 SIM 卡 PIN 码,您还可以尝试 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍不正确,则需要联系运营商帮您解锁设备。</item>
其中最有可能的是这两处
frameworks/base/packages/SystemUI/res-unisoc/values-zh-rCN/strings_ex.xml: <item quantity="other">请输入 SIM <xliff:g id="carrier" example="CARD 1">%1$s</xliff:g> PIN,您还可以尝试 <xliff:g id="number">%2$d</xliff:g> 次。</item>frameworks/base/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml: <item quantity="other">请输入 SIM 卡 PIN 码,您还可以尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item>
打开第二个查看具体内容
frameworks/base/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
<plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"><item quantity="other">请输入 SIM 卡 PIN 码,您还可以尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item><item quantity="one">请输入 SIM 卡 PIN 码,您还可以尝试 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍不正确,则需要联系运营商帮您解锁设备。</item></plurals>
得到关键字
kg_password_default_pin_message
定位pin码java代码位置
通过上面的关键字,在.java文件中搜索,可定位到java代码
find frameworks/base/ -name "*.java" | xargs grep "kg_password_default_pin_message"
frameworks/base/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java: msgId = isDefault ? R.plurals.kg_password_default_pin_message :
frameworks/base/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java: msgId = isDefault ? R.plurals.kg_password_default_pin_message_multi :
frameworks/base/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java
这段代码是针对不同情况获取到不同的提示文本。
private String getPinPasswordErrorMessage(int attemptsRemaining, boolean isDefault) {String displayMessage;int msgId;if (attemptsRemaining == 0) {// 这里是尝试多次pin码都错误情况下的错误提示displayMessage = getContext().getString(R.string.kg_password_wrong_pin_code_pukked);} else if (attemptsRemaining > 0) {// 这里是还有可尝试输入pin码的次数情况int count = TelephonyManager.getDefault().getSimCount();if (count < 2) {msgId = isDefault ? R.plurals.kg_password_default_pin_message :R.plurals.kg_password_wrong_pin_code;displayMessage = getContext().getResources().getQuantityString(msgId, attemptsRemaining, attemptsRemaining);} else {msgId = isDefault ? R.plurals.kg_password_default_pin_message_multi :R.plurals.kg_password_wrong_pin_code_multi;int phoneId = SubscriptionManager.getPhoneId(mSubId);SubscriptionInfo info = Dependency.get(KeyguardUpdateMonitor.class).getSubscriptionInfoForSubId(mSubId);Log.d(LOG_TAG, "phoneId : " + phoneId + "; mSubId : " + mSubId + "; info : " + info);if (info!= null && !SubscriptionManager.isValidPhoneId(phoneId)) {phoneId = info.getSimSlotIndex();Log.d(LOG_TAG, "SubscriptionInfo:"+info.toString() + "; phoneId : " + phoneId);}displayMessage = getContext().getResources().getQuantityString(msgId,attemptsRemaining, phoneId + 1, attemptsRemaining);}} else {msgId = isDefault ? R.string.kg_sim_pin_instructions : R.string.kg_password_pin_failed;displayMessage = getContext().getString(msgId);}if (KeyguardEsimArea.isEsimLocked(mContext, mSubId)) {displayMessage = getResources().getString(R.string.kg_sim_lock_esim_instructions, displayMessage);}if (DEBUG) Log.d(LOG_TAG, "getPinPasswordErrorMessage:"+ " attemptsRemaining=" + attemptsRemaining + " displayMessage=" + displayMessage);return displayMessage;}
在SystemUI目录下搜索,发现如下这些地方,有多处,代表锁屏时不同的窗口
这是由KeyguardSecurityContainer.java中判断,调用哪个layout的view, 对应上面的不同view
private int getSecurityViewIdForMode(SecurityMode securityMode) {switch (securityMode) {case Pattern: return R.id.keyguard_pattern_view;case PIN: return R.id.keyguard_pin_view;case Password: return R.id.keyguard_password_view;case SimPin: return R.id.keyguard_sim_pin_view;case SimPuk: return R.id.keyguard_sim_puk_view;// Unisoc: Support for SimLockcase SimLock: return !mHideSimLockView? R.id.keyguard_simlock_view : R.id.keyguard_operator_simlock_view;/* For SubsidyLock feature @{ */case SubsidyLock_Lock: return R.id.keyguard_subsidylock_lock_view;case SubsidyLock_EnterCode: return R.id.keyguard_subsidylock_entercode_view;case SubsidyLock_Init: return R.id.keyguard_subsidylock_init_view;/* @} */}return 0;}
这里就是要求用户输入pin码的弹窗代码
KeyguardSimPinView.java, 此类继承自KeyguardPinBasedInputView.java,再上一层父类是KeyguardAbsKeyInputView.java。
先只看KeyguardSimPinView.java的代码
如下是设置文本提示的地方,调用上面提到的getPinPasswordErrorMessage
setLockedSimMessage() {if (mSecurityMessageDisplay != null && getVisibility() == VISIBLE) {if (msg == null) {msg = getPinPasswordErrorMessage(mRemainingAttempts, true);} else {msg = msg.concat(getPinPasswordErrorMessage(mRemainingAttempts, true));}mSecurityMessageDisplay.setMessage(msg);}
}
它对应的layout是这个
keyguard_sim_pin_view.xml
<com.android.keyguard.KeyguardSimPinViewxmlns:android="http://schemas.android.com/apk/res/android"xmlns:androidprv="http://schemas.android.com/apk/res-auto"android:id="@+id/keyguard_sim_pin_view"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"androidprv:layout_maxWidth="@dimen/keyguard_security_width"androidprv:layout_maxHeight="@dimen/keyguard_security_max_height"android:gravity="center_horizontal"><!-- 这个是sim卡的图标 --><ImageViewandroid:id="@+id/keyguard_sim"android:layout_width="match_parent"android:layout_height="wrap_content"android:tint="@color/background_protected"android:src="@drawable/ic_lockscreen_sim"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:orientation="vertical"android:gravity="center"android:layout_weight="1"android:layoutDirection="ltr"><!-- 停用 eSIM 卡提示,默认不显示 --><include layout="@layout/keyguard_esim_area"android:id="@+id/keyguard_esim_area"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="@dimen/eca_overlap" /><RelativeLayoutandroid:id="@+id/row0"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:paddingBottom="16dp"><!-- 密码输入框 --><com.android.keyguard.PasswordTextViewandroid:id="@+id/simPinEntry"android:layout_width="@dimen/keyguard_security_width"android:layout_height="match_parent"android:gravity="center"android:layout_centerHorizontal="true"android:layout_marginRight="72dp"androidprv:scaledTextSize="@integer/scaled_password_text_size"android:textColor="?attr/wallpaperTextColor"android:contentDescription="@string/keyguard_accessibility_sim_pin_area"/><Viewandroid:id="@+id/divider"android:layout_width="match_parent"android:layout_height="1dp"android:layout_alignParentBottom="true"android:background="@drawable/pin_divider"/></RelativeLayout><!-- 数字1到9 --><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:orientation="horizontal"><com.android.keyguard.NumPadKeyandroid:id="@+id/key1"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="1"/><com.android.keyguard.NumPadKeyandroid:id="@+id/key2"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="2"/><com.android.keyguard.NumPadKeyandroid:id="@+id/key3"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="3"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:orientation="horizontal"><com.android.keyguard.NumPadKeyandroid:id="@+id/key4"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="4"/><com.android.keyguard.NumPadKeyandroid:id="@+id/key5"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="5"/><com.android.keyguard.NumPadKeyandroid:id="@+id/key6"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="6"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:orientation="horizontal"android:layout_weight="1"><com.android.keyguard.NumPadKeyandroid:id="@+id/key7"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="7"/><com.android.keyguard.NumPadKeyandroid:id="@+id/key8"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="8"/><com.android.keyguard.NumPadKeyandroid:id="@+id/key9"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="9"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:orientation="horizontal"><!-- 删除按钮 --><com.android.keyguard.AlphaOptimizedImageButtonandroid:id="@+id/delete_button"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"android:background="@drawable/ripple_drawable_pin"android:contentDescription="@string/keyboardview_keycode_delete"style="@style/Keyguard.ImageButton.NumPadDelete"/><!-- 数字0 --><com.android.keyguard.NumPadKeyandroid:id="@+id/key0"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"androidprv:textView="@+id/simPinEntry"androidprv:digit="0"/><!-- 确认输入按钮 --><com.android.keyguard.AlphaOptimizedImageButtonandroid:id="@+id/key_enter"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"style="@style/Keyguard.ImageButton.NumPadEnter"android:background="@drawable/ripple_drawable_pin"android:contentDescription="@string/keyboardview_keycode_enter"/></LinearLayout></LinearLayout><!-- keyguard_eca,它实际是一个引用,指向另一个layout,引用说明在values-land/alias.xml中,代表紧急拔号的ui --><include layout="@layout/keyguard_eca"android:id="@+id/keyguard_selector_fade_container"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:layout_gravity="bottom|center_horizontal"android:gravity="center_horizontal"/><!-- UNISOC: Add for SubsidyLock @{ --><TextViewstyle="?android:attr/buttonBarButtonStyle"android:id="@+id/kg_simpin_dismiss_button"android:layout_width="wrap_content"android:layout_marginTop="@dimen/eca_overlap"android:layout_height="wrap_content"android:text="@string/simlock_dismiss" <!-- 取消 -->android:textAppearance="?android:attr/textAppearanceMedium"android:textSize="@dimen/kg_status_line_font_size"android:textColor="?attr/wallpaperTextColor"android:textAllCaps="@bool/kg_use_all_caps"android:visibility="gone"/><!-- @} --></com.android.keyguard.KeyguardSimPinView>
定制pin码framework窗口
定位到代码后,就可以进行替换
如果把这个layout放到Android Studio中预览,就是如图的样子:
知道layout就可以做针对性的修改了,
比如不要显示最上方的sim卡图标,则在layout中加个android:visibility=“gone”
详情如下:
<ImageViewandroid:id="@+id/keyguard_sim"android:layout_width="match_parent"android:layout_height="wrap_content"android:tint="@color/background_protected"android:visibility="gone"android:src="@drawable/ic_lockscreen_sim"/>
比如要改数字按钮,则就改com.android.keyguard.NumPadKey
数字按钮
代码NumPadKey.java
public NumPadKey(Context context, AttributeSet attrs, int defStyle) {this(context, attrs, defStyle, R.layout.keyguard_num_pad_key);}
layout keyguard_num_pad.key.xml
<merge xmlns:android="http://schemas.android.com/apk/res/android"><TextViewandroid:id="@+id/digit_text"style="@style/Widget.TextView.NumPadKey"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/klondike_text"style="@style/Widget.TextView.NumPadKey.Klondike"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</merge>
修改layout就会影响数字的样式。
作者:帅得不敢出门
相关文章:
Android Framework定制sim卡插入解锁pin码的界面
文章目录 手机设置SIM卡pin码一、安卓手机二、苹果手机 Android Framework中SIM卡pin码代码定位pin码提示文本位置定位pin码java代码位置 定制pin码framework窗口数字按钮 手机设置SIM卡pin码 设置 SIM 卡 PIN 码可以提高手机的安全性,防止他人在未经授权的情况下使…...
cc2530 Basic RF 讲解 和点灯讲解(1_1)
1. Basic RF 概述 Basic RF 是 TI 提供的一套简化版的无线通信协议栈,旨在帮助开发者快速搭建无线通信系统。它基于 IEEE 802.15.4 标准的数据包收发,但只用于演示无线设备数据传输的基本方法,不包含完整功能的协议。Basic RF 的功能限制包括…...
Android H5页面性能分析策略
文章目录 引言一、拦截资源加载请求以优化性能二、通过JavaScript代码监控资源下载速度三、使用vConsole进行前端性能调试四、使用Chrome DevTools调试Android端五、通过抓包分析优化网络性能六、总结 引言 在移动应用开发中,H5页面的性能直接影响到用户体验。本文…...
【前端面试】Typescript
Typescript面试题目回答 Typescript有哪些常用类型? Typescript的常用类型包括: 基本类型:boolean(布尔类型)、number(数字类型)、string(字符串类型)。特殊类型:nul…...
程序语言的内存管理:垃圾回收GC(Java)、手动管理(C语言)与所有权机制(Rust)(手动内存管理、手动管理内存)
文章目录 程序语言的内存管理:垃圾回收、手动管理与所有权机制引言一、垃圾回收机制(GC)(Java)1. 什么是垃圾回收机制2. 垃圾回收的工作原理3. 优点与缺点4. 示例代码 二、手动管理内存的分配和释放(C语言&…...
研究生论文学习记录
文献检索 检索论文的网站 知网:找论文,寻找创新点paperswithcode :这个网站可以直接找到源代码 直接再谷歌学术搜索 格式:”期刊名称“ 关键词 在谷歌学术搜索特定期刊的关键词相关论文,可以使用以下几种方法&#…...
毕业设计选题:基于Django+Vue的图书馆管理系统
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页 图书馆界面 图书信息界面 个人中心界面 后台登录界面 管理员功能界面 用户…...
#网络安全#NGSOC与传统SOC的区别
NGSOC是Next Generation Security Operation Center(下一代安全运营中心)的缩写。 NGSOC安全运营服务基于态势感知与安全运营平台来开展监测分析等一系列的服务工作,旨在通过专业、高效的运营服务工作,帮助用户尽可能发挥NGSOC作…...
GCN+BiLSTM多特征输入时间序列预测(Pytorch)
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GCNBiLSTM多特征输入时间序列预测(Pytorch) 可以做风电预测,光伏预测,寿命预测,浓度预测等。 Python代码,基于Pytorch编写 1.多特征输入单步预测…...
LinkedList和链表之刷题课(下)
1. 给定x根据x把链表分割,大的结点放在x后面,小的结点放在x前面 题目解析: 注意此时的pHead就是head(头节点的意思) 基本上就是给定一个链表,我们根据x的值来把这个链表分成俩部分,大的那部分放在x后面,小的那部分放在x前面,并且我们不能改变链表本来的顺序,比如下面的链表,我…...
ollama 在 Linux 环境的安装
ollama 在 Linux 环境的安装 介绍 他的存在在我看来跟 docker 的很是相似,他把市面上已经存在的大语言模型集合在一个仓库中,然后通过 ollama 的方式来管理这些大语言模型 下载 # 可以直接通过 http 的方式吧对应的 shell 脚本下载下来,然…...
C语言二刷指针篇
&取得变量的地址 printf("%p\n", &a); printf("%p\n", a); printf("%p\n", &a[0]); printf("%p\n", &a[1]); 前三个输出相同,a[0]和a[1]之间相差4 指针就是保存地址的变量,指针里放的是别的…...
LeetCode题练习与总结:回文对--336
一、题目描述 给定一个由唯一字符串构成的 0 索引 数组 words 。 回文对 是一对整数 (i, j) ,满足以下条件: 0 < i, j < words.length,i ! j ,并且words[i] words[j](两个字符串的连接)是一个回文…...
CesiumJS 案例 P7:添加指定长宽的图片图层(原点分别为图片图层的中心点、左上角顶点、右上角顶点、左下角顶点、右下角顶点)
CesiumJS CesiumJS API:https://cesium.com/learn/cesiumjs/ref-doc/index.html CesiumJS 是一个开源的 JavaScript 库,它用于在网页中创建和控制 3D 地球仪(地图) 一、添加指定长宽的图片图层(原点为图片图层的中心…...
Redis 主从同步 问题
前言 相关系列 《Redis & 目录》(持续更新)《Redis & 主从同步 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 主从同步 & 总结》(学习总结/最新最准/持续更新)《Redis &a…...
【SQL Server】探讨 IN 和 EXISTS之间的区别
前言 在使用 SQL 查询相关表数据时,通常需要根据另一个表中的值来筛选数据。而 IN 与 EXISTS 子句都是用于此场景的常用方式,但使用时两者存在工作方式不同。它们使用上的选择会显著影响查询的性能,尤其是在大型数据集中。本文我们一起探讨 IN 和 EXISTS 之间的区别、使用与…...
清理pip和conda缓存
当用户目录没有空间时,可清理pip和conda缓存 清理conda缓存: conda clean --all清理pip缓存: pip cache purgeNote: 可以利用软链接,将用户目录下的文件链接到其他位置 首先移动文件或文件夹到其他位置 mv ~/test /…...
git rebase和merge的区别
Git merge和Git rebase是两种不同的合并策略,它们在处理分支合并时有各自的优点和缺点。 Git fetch git fetch 命令用于从远程仓库获取最新的更改,但不会自动合并这些更改到你的本地分支。它会下载远程仓库的所有分支和标签,并更新你的本地…...
【elkb】linux麒麟v10安装ELKB 8.8.X版本(ARM架构)
下载软件 相关版本信息 elasticsearch:8.8.1kibana:8.8.1logstash:8.8.1filebeat:8.8.1 下载地址 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.1-linux-aarch64.tar.gzhttps://artifacts.elastic…...
bluez hid host介绍,连接键盘/鼠标/手柄不是梦,安排
零. 前言 由于Bluez的介绍文档有限,以及对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度,学习曲线也相对较陡,所以我有了这个想法,专门对Bluez做一个系统…...
GPT打数模——电商品类货量预测及品类分仓规划
背景 电商企业在各区域的商品存储主要由多个仓库组成的仓群承担。其中存储的商品主要按照属性(品类、件型等)进行划分和打标,便于进行库存管理。图 1 是一个简化的示意图,商品品类各异,件数众多,必须将这些…...
华为OD机试 - 螺旋数字矩阵 - 矩阵(Python/JS/C/C++ 2024 D卷 100分)
华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...
分类预测 | GCN图卷积神经网络多特征分类预测(MATLAB)
分类预测 | GCN图卷积神经网络多特征分类预测(MATLAB) 目录 分类预测 | GCN图卷积神经网络多特征分类预测(MATLAB)分类效果基本介绍程序设计参考资料分类效果 基本介绍 GCN图卷积神经网络多特征分类预测(MATLAB) 在图卷积神经网络(GCN)中,多特征分类...
FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板…...
App相关技术以及打包
平时小伙伴们自己的博客网站只能在浏览器打开,但是有时候你想要制作自己独立个人博客app,宣传并推广自己的app,打造个人ip。如何把自己的web博客网站打包成安卓app? 1.开发App的相关技术使⽤ ⽬前市⾯上的移动互联开发技术主要分…...
【unity】【游戏开发】Unity代码不给提示怎么办?
【现象】 Unity用着用着忽然VS脚本不给提示了。 【分析】 重启Unity无效 重启VS无效 重装VS无效 感觉应该是项目设置问题 【最终方法】 打开Edit->Preferences。 如果是这个画面就把Script Editor改成自己的VS编辑器。 变成下面这个样子,点击Regenerate Pr…...
Kubernetes固定Pod IP和Mac地址
方案1: 在 Calico GitHub Issues#5196 问题的 commits#6249 提交中,引入新的 Pod 注释cni.projectcalico.org/hwAddr,用于将指定的 MAC 地址分配给容器端 Veth 接口。 将Calico升级至v3.24.1或以上版本,使用如下注解轻松设置Pod…...
计算机组成原理之数据的对齐和大/小端存放方式、计算机中数据对齐的具体方式有哪些
1、计算机组成原理之数据的对齐和大/小端存放方式 数据对齐 数据对齐是处理器为了提高处理性能而对存取数据的起始地址所提出的一种要求。 系统一次性读取内存中数据的大小是固定的,例如字长为32位的操作系统,默认的一次读取4字节内容。因此ÿ…...
【学术论文投稿】Windows11开发指南:打造卓越应用的必备攻略
【IEEE出版南方科技大学】第十一届电气工程与自动化国际会议(IFEEA 2024)_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看:https://ais.cn/u/nuyAF3 目录 引言 一、Windows11开发环境搭建 二、Windows11关键新特性 三、Windows11设计指南 …...
【毕业论文+源码】基于SSM(Spring + Spring MVC + MyBatis)的房屋租赁系统
创建一个基于SSM(Spring Spring MVC MyBatis)框架的房屋租赁系统是一个涉及多个步骤的过程。这个过程包括但不限于需求分析、数据库设计、前端界面设计以及后端逻辑实现等。 1. 需求分析 首先,明确你的房屋租赁系统的功能需求。例如&…...
长沙高端网站建设/公司网站seo外包
最近在尝试leetcode,今天做了一道简单题目,正好开通了博客,分享下自己.net 代码: 1 public int Reverse(int x)2 {3 var intQuery new Queue<int>();4 long temp 0;5 6 whil…...
图片设计师网站/百度数据库
SSH(安全外壳)是用于基于Linux的系统,路由器,交换机,防火墙,设备和其他资产的最常见的远程管理协议。尽管SSH守护程序提供了出色的强化功能,以增强您的身份验证方法和访问控制,但SSH…...
青岛b2b网站建设/关键词优化公司推荐
Mybatis基础版 完结撒发 查询缓存 一级缓存 MyBatis 默认开启一级缓存,如果使用同一个的SqlSession对象执行相同的查询语句,则只会在第一次查询时向数据库发送SQL语句,并将查询结果放入到SqlSession中(作为缓存 存在࿰…...
房屋产权地址备案在那个网站做/企业培训公司有哪些
第一次观看我文章的朋友,可以关注、点赞、转发一下,每天分享各种干货技术和程序猿趣事 前言 职场的金三银四跳槽季又来了,不同的是今年比往年「冷」一些,形式更加严峻一些,大家多多少少可能都听到或看到一些信息&…...
wordpress 网页加载慢/惠州优化怎么做seo
很多朋友在把电脑换成windows 7系统后,想设置屏保时却发现win7的跟xp的屏保设置位置不一样,一时之间不知道在哪里设置了。现在,就让我来告诉你Windows 7屏保在哪里设置吧!1、右键点击桌面2、选择最下面的“个性化”3、在弹出窗口找…...
iapp用网站做软件代码/什么是软文推广
欢迎观看Illustrator教程,小编带大家学习Illustrator2022的基本工具和使用技巧,了解如何在 Illustrator 中创建、编辑以及应用自定义渐变。 Illustrator 提供多种着色方式, 让您可以创造性地运用色彩,包括在图稿上应用渐变。渐变…...