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

以unity技术开发视角对android权限的讲解

目录

前言

Android权限分类

普通权限

 普通权限定义

普通权限有哪些

危险权限

 危险权限的定义

危险权限有哪些 

动态申请权限实例

申请单个权限实例

第一步:在清单文件中声明权限

 第二步:在代码中进行动态申请权限

申请多个权限实例

第一步:在清单文件中声明权限

第二步:在代码中进行动态申请权限


前言

        在unity开发过程中,接SDK的时候有一个问题是绕不开,那就是合规问题,早期的时候对于权限设置和获取并没有那么多限制,或者说规范吧。现如今随着合规越来越严格,对于unity游戏开发人员对于android的权限有一些大致了解还是有其必要性,尤其是需要接SDK的小朋友而言,更是如此。这里就简约讲解下android有哪些权限分类,同时如何在运行时申请权限。由于android开发并不是我的主要技术防线,所以这里只做一个简单的知识普及而已。

Android权限分类

        普通权限(安装时权限

        危险权限(运行时权限

        特殊权限  (一般属于系统层面,这里就不作叙述)

普通权限

 普通权限定义

不需要动态请求用户授权,只需要在AndroidManifest.xml中声明即可的权限。  此类权限允许访问超出应用沙盒的数据和执行超出应用沙盒的操作,但对用户隐私和其他应用的运行构成的风险很小。系统会为一般权限分配 normal 保护级别。

例如: 网络访问(魅族系统进行了魔改,网络权限也需要申请)、WIFI状态、音量设置等。

如:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapp"android:versionCode="1"android:versionName="1.0"><!-- 定义应用程序的权限 --><!-- 运用获取网络状态权限--><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 定义应用程序的 Application 类 --><application...省略</application>
</manifest>

普通权限有哪些

ACCESS_CHECKIN_PROPERTIES:读取和写入“properties”表在checkin数据库中
ACCESS_LOCATION_EXTRA_COMMANDS:访问额外的位置提供命令
ACCESS_NETWORK_STATE:获取网络信息状态
ACCESS_NOTIFICATION_POLICY:希望访问通知策略的应用程序的标记许可
ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息
ACCOUNT_MANAGER:通过账户验证方式访问账户管理ACCOUNT_MANAGER相关信息
BATTERY_STATS:更新手机电池统计信息
BIND_ACCESSIBILITY_SERVICE:请求accessibilityservice服务
BIND_APPWIDGET:告诉appWidget服务需要访问小插件的数据库
BIND_CARRIER_MESSAGING_SERVICE:绑定到运营商应用程序中的服务
BIND_CARRIER_SERVICES:绑定到运营商应用程序中的服务
BIND_CHOOSER_TARGET_SERVICE:由ChooserTargetService要求的服务
BIND_DEVICE_ADMIN:请求系统管理员receiver
BIND_DREAM_SERVICE:由一个DreamService要求的服务
BIND_INCALL_SERVICE:请求MidiDeviceService服务
BIND_INPUT_METHOD:请求InputMethodService服务
BIND_MIDI_DEVICE_SERVICE:由一MidiDeviceService要求的服务
BIND_NFC_SERVICE:由HostApduServiceOffHostApduService要求的服务
BIND_NOTIFICATION_LISTENER_SERVICE:由notificationlistenerservice要求的服务
BIND_PRINT_SERVICE:由printservice要求的服务
BIND_REMOTEVIEWS:通过RemoteViewsService服务请求
BIND_TELECOM_CONNECTION_SERVICE:由ConnectionService要求的服务
BIND_TEXT_SERVICE:由textservice要求的服务
BIND_TV_INPUT:由TvInputService要求的服务
BIND_VOICE_INTERACTION:由VoiceInteractionService要求的服务
BIND_VPN_SERVICE:通过VpnService服务请求
BIND_WALLPAPER:通过WallpaperService服务请求
BLUETOOTH:连接配对过的蓝牙设备
BLUETOOTH_ADMIN:发现和配对新的蓝牙设备
BLUETOOTH_PRIVILEGED:配对蓝牙设备,无需用户交互
BROADCAST_PACKAGE_REMOVED:广播一个提示消息在一个应用程序包已经移除后
BROADCAST_SMS:当收到短信时触发广播
BROADCAST_STICKY:收到广播后快速收到下一个广播
BROADCAST_WAP_PUSH:WAP PUSH服务收到后触发广播
CALL_PRIVILEGED:拨打电话,替换系统的拨号器界面
CAPTURE_AUDIO_OUTPUT:捕获音频输出
CAPTURE_SECURE_VIDEO_OUTPUT:捕获视频输出
CAPTURE_VIDEO_OUTPUT:捕获视频输出
CHANGE_COMPONENT_ENABLED_STATE:改变组件是否启用状态
CHANGE_CONFIGURATION:改变配置信息
CHANGE_NETWORK_STATE:改变网络状态,如是否联网
CHANGE_WIFI_MULTICAST_STATE:改变WiFi多播状态
CHANGE_WIFI_STATE:改变WiFi状态
CLEAR_APP_CACHE:清除应用缓存
CONTROL_LOCATION_UPDATES:获得移动网络定位信息
DELETE_CACHE_FILES:删除缓存文件
DELETE_PACKAGES:删除应用
DIAGNOSTIC:RW到诊断资源
DISABLE_KEYGUARD:禁用键盘锁
DUMP:获取系统dump信息
EXPAND_STATUS_BAR:扩展或收缩状态栏
FACTORY_TEST:运行工厂测试模式
FLASHLIGHT:访问闪光灯
GET_ACCOUNTS_PRIVILEGED:访问帐户服务中的帐户列表
GET_PACKAGE_SIZE:获取任何package占用空间容量
GET_TASKS:获取信息有关当前或最近运行的任务
GLOBAL_SEARCH:允许全局搜索
INSTALL_LOCATION_PROVIDER:安装定位提供
INSTALL_PACKAGES:安装应用
INSTALL_SHORTCUT:创建快捷方式
INTERNET:访问网络连接
KILL_BACKGROUND_PROCESSES:结束后台进程
LOCATION_HARDWARE:使用定位功能的硬件
MANAGE_DOCUMENTS:管理文档访问
MASTER_CLEAR:执行软格式化,删除系统配置信息
MEDIA_CONTENT_CONTROL:控制播放和内容
MODIFY_AUDIO_SETTINGS:修改声音设置信息
MODIFY_PHONE_STATE:修改电话状态
MOUNT_FORMAT_FILESYSTEMS:格式化可移动文件系统
MOUNT_UNMOUNT_FILESYSTEMS:挂载、反挂载外部文件系统
NFC:执行NFC近距离通讯操作
PACKAGE_USAGE_STATS:设置他的activities显示
PERSISTENT_ACTIVITY:创建一个永久的Activity
READ_FRAME_BUFFER:读取帧缓存
READ_INPUT_STATE:读取当前键的输入状态
READ_LOGS:读取系统底层日志
READ_SYNC_SETTINGS:读取同步设置
READ_SYNC_STATS:读取同步状态
READ_VOICEMAIL:读取语音邮件
REBOOT:重新启动设备
RECEIVE_BOOT_COMPLETED:开机自动运行
REORDER_TASKS:重新排序系统Z轴运行中的任务
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:请求忽略电池优化
REQUEST_INSTALL_PACKAGES:请求安装包
RESTART_PACKAGES:结束任务
SEND_RESPOND_VIA_MESSAGE:即时的短信息回复
SET_ALARM:设置闹铃提醒
SET_ALWAYS_FINISH:程序在后台是否总是退出
SET_ANIMATION_SCALE:设置全局动画缩放
SET_DEBUG_APP:设置调试程序
SET_PREFERRED_APPLICATIONS:设置应用的参数
SET_PROCESS_LIMIT:设置最大的进程数量的限制
SET_TIME:设置系统时间
SET_TIME_ZONE:设置系统时区
SET_WALLPAPER:设置桌面壁纸
SET_WALLPAPER_HINTS:设置壁纸建议
SIGNAL_PERSISTENT_PROCESSES:发送一个永久的进程信号
STATUS_BAR:打开、关闭、禁用状态栏
SYSTEM_ALERT_WINDOW:显示系统窗口
TRANSMIT_IR:使用设备的红外发射器
UNINSTALL_SHORTCUT:删除快捷方式
UPDATE_DEVICE_STATS:更新设备状态
USE_FINGERPRINT:使用指纹硬件
VIBRATE:允许程序振动
WAKE_LOCK :允许程序在手机屏幕关闭后后台进程仍然运行
WRITE_APN_SETTINGS:允许程序写入网络GPRS接入点设置
WRITE_GSERVICES:允许程序修改Google服务地图
WRITE_SECURE_SETTINGS:允许应用程序读取或写入安全系统设置
WRITE_SETTINGS:允许程序读取或写入系统设置 WRITE_SYNC_SETTINGS:允许程序写入同步设置
WRITE_VOICEMAIL:允许应用程序修改和删除系统中的现有的语音邮件,只有系统才能使用
 

危险权限

 危险权限的定义

        涵盖应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他应用的操作产生影响的区域。

例如: 读取通讯录、访问媒体和摄像机设备、读写存储器数据、获取用户位置等。如果应用声明需要这些危险权限,则必须在运行时明确告诉用户,让用户手动授予。

危险权限有哪些 

编号权限组权限
1CALENDAR (日历)READ_CALENDAR( 读取日历
WRITE_CALENDAR(
写入日历
2CAMERA (相机)CAMERA(照相机
3CONTACTS (联系人)READ_CONTACTS(读取通讯录
WRITE_CONTACTS(
写入通讯录
GET_ACCOUNTS(
访问通讯录权限
4LOCATION (位置)ACCESS_FINE_LOCATION(获取位置
ACCESS_COARSE_LOCATION(
获取粗略定位
5MICROPHONE (麦克风)RECORD_AUDIO(录音
6PHONE (手机)READ_PHONE_STATE(读取手机状态
CALL_PHONE(
打电话
READ_CALL_LOG(
看电话记录
WRITE_CALL_LOG(
编写调用日志
ADD_VOICEMAIL(
添加语音信箱
USE_SIP(
 使用SIP
PROCESS_OUTGOING_CALLS(
 过程输出调用
7SENSORS (传感器)BODY_SENSORS(体传感器
8SMS (短信)SEND_SMS(发信息
RECEIVE_SMS(
收信息
READ_SMS(
读取信息
RECEIVE_WAP_PUSH(
收到WAP推送
RECEIVE_MMS(
接收彩信
9STORAGE (存储卡)READ_EXTERNAL_STORAGE(读取外部存储器 
WRITE_EXTERNAL_STORAGE(
写外部存储器

动态申请权限实例

申请单个权限实例

以获取获取打电话权限(CALL_PHONE)为例

第一步:在清单文件中声明权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.apple.encryptiondemo"><uses-permission android:name="android.permission.CALL_PHONE" />...

 第二步:在代码中进行动态申请权限

public class MainActivity extends BaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btn_call = findViewById(R.id.btn_call);btn_call.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//==第一步:判断用户是否已经授权//ContextCompat.checkSelfPermission() 参数一:context 参数二:具体的权限名if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {//没有授权,则申请授权//ActivityCompat.requestPermissions() 参数一:context 参数二:申请的权限名数组 参数三:请求码,要求唯一值ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);} else {call();}}});}@SuppressLint("MissingPermission")private void call() {Intent intent = new Intent(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:10086"));startActivity(intent);}//==第二步:调用requestPermissions申请权限,不管是否同意都会回调onRequestPermissionsResult@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case 1:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {call();} else {Toast.makeText(MainActivity.this, "you denied", Toast.LENGTH_SHORT).show();}break;}}
}

申请多个权限实例

        获取打电话和扩展SD卡权限为例

第一步:在清单文件中声明权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.apple.encryptiondemo"><uses-permission android:name="android.permission.CALL_PHONE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/>

第二步:在代码中进行动态申请权限

public class MainActivity extends BaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btn_call = findViewById(R.id.btn_call);btn_call.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//第一步:看权限是否已经被申请,没有则申请权限List<String> permissionList = new ArrayList<>();if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {permissionList.add(Manifest.permission.CALL_PHONE);}if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {permissionList.add(Manifest.permission.READ_PHONE_STATE);}if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);}if (!permissionList.isEmpty()) {String[] permissions = permissionList.toArray(new String[permissionList.size()]);ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);} else {call();}}});}@SuppressLint("MissingPermission")private void call() {Intent intent = new Intent(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:10086"));startActivity(intent);}//第二步:调用requestPermissions申请权限,不管是否同意都会回调onRequestPermissionsResult@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case 1:if (grantResults.length > 0) {for (int result : grantResults) {if (result != PackageManager.PERMISSION_GRANTED) {Toast.makeText(MainActivity.this, "you denied some", Toast.LENGTH_SHORT).show();finish();return;}}call();}else{Toast.makeText(MainActivity.this, "发生未知错误", Toast.LENGTH_SHORT).show();finish();}break;}}
}

由于作者水平有限,如果有错误和不当之处,忘小伙伴指正,不胜感激!!! 

参考资料

https://www.jianshu.com/p/338741725cd0

https://developer.android.google.cn/guide/topics/permissions/overview?hl=zh_cn

https://blog.csdn.net/m0_45695811/article/details/133851898

        

相关文章:

以unity技术开发视角对android权限的讲解

目录 前言 Android权限分类 普通权限 普通权限定义 普通权限有哪些 危险权限 危险权限的定义 危险权限有哪些 动态申请权限实例 申请单个权限实例 第一步&#xff1a;在清单文件中声明权限 第二步&#xff1a;在代码中进行动态申请权限 申请多个权限实例 第一步&am…...

910b上跑Chatglm3-6b进行流式输出【pytorch框架】

文章目录 准备阶段避坑阶段添加代码结果展示 准备阶段 配套软件包Ascend-cann-toolkit和Ascend-cann-nnae适配昇腾的Pytorch适配昇腾的Torchvision Adapter下载ChatGLM3代码下载chatglm3-6b模型&#xff0c;或在modelscope里下载 避坑阶段 每个人的服务器都不一样&#xff0…...

2024年江苏省职业院校技能大赛高职学生组软件测试—任务五接口测试题目

2024年江苏省职业院校技能大赛高职学生组软件测试任务五 接口测试 任务要求 题目1&#xff1a;登录接口脚本编写和执行测试。 1、登录接口描述如下&#xff1a; 接口功能&#xff1a;提供用户登录功能处理&#xff0c;根据传入的用户名和密码判断登录状态。 接口地址&…...

螺旋数字矩阵 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 疫情期间&#xff0c;小明隔离在家&#xff0c;百无聊赖&#xff0c;在纸上写数字玩。他发明了一种写法: 给出数字个数n和行数m (0 < n < 999&#xff0c;…...

更改ERPNEXT源

更改ERPNEXT源 一&#xff0c; 更改源 针对已经安装了erpnext的&#xff0c;需要更改源的情况&#xff1a; 1, 更改为官方默认源, 进入frapp-bench的目录&#xff0c; 然后执行: bench remote-reset-url frappe //重设frappe的源为官方github地址。 bench remote-reset-url…...

配置基本QinQ示例

QinQ简介 定义 QinQ&#xff08;802.1Q-in-802.1Q&#xff09;技术是一项扩展VLAN空间的技术&#xff0c;通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的功能&#xff0c;可以使私网VLAN透传公网。由于在骨干网中传递的报文有两层802.1Q Tag&#x…...

界面控件DevExpress Blazor Grid v23.2 - 支持全新的单元格编辑模式

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 在这篇文章中&#xff0c;我们将介…...

深入剖析pcap中的网络异常:TTL过期攻击、ARP中毒、TCP重传与重叠碎片等

网络流量数据包捕获是网络安全领域的重要部分&#xff0c;而pcap文件则是这一过程的常见载体。为了深入解析pcap文件中潜在的可疑网络流量&#xff0c;我们需要运用强大的网络安全威胁评估与审计工具。这些工具能够帮助我们捕捉、记录、检测和诊断网络中的数据传输问题&#xf…...

网站被挂黑链怎么办

网站被挂黑链这种事情总是防不胜防&#xff0c;且不说网站本身的安全防护做的是否到位&#xff0c;但只要被盯上了就难逃厄运。即使是企业机构的网站也难逃被黑的经历&#xff0c;更何况用户苦心经营的网站&#xff0c;因此首先需要正确看待挂黑链这个现象&#xff0c;网站被挂…...

WPF 导航界面悬浮两行之间的卡片 漂亮的卡片导航界面 WPF漂亮渐变颜色 WPF漂亮导航头界面 UniformGrid漂亮展现

在现代应用程序设计中&#xff0c;一个漂亮的WPF导航界面不仅为用户提供视觉上的享受&#xff0c;更对提升用户体验、增强功能可发现性和应用整体效率起到至关重要的作用。以下是对WPF漂亮导航界面重要性的详尽介绍&#xff1a; 首先&#xff0c;引人入胜的首页界面是用户与软…...

[技术杂谈]使用VLC将视频转成一个可循环rtsp流

通过vlc播放器&#xff0c;将一个视频转成rtsp流&#xff0c;搭建一个rtsp服务器。rtsp客户端可访问这个视频的rtsp流。 1. 打开vlc播放器&#xff0c;使用的版本如下 2. 菜单&#xff1a;媒体 ---> 流 3. 添加视频文件&#xff0c;点击添加一个mp4 文件 4. 选择串流&…...

手机上连网络转接app,电脑连接手机,共用网络转接app的办法

方法一&#xff0c;&#xff08;不推荐&#xff09; 因为太简单了所以写一下 电脑安装MuMu模拟器&#xff0c;之后安装网络转接app&#xff0c;这个模拟器设置了从电脑上安装app和&#xff0c;安卓与电脑同步文件夹功能&#xff0c;实现文件共享。所以直接用就可以了。 方法二…...

k8s中的容器探针

pod的容器健康检查---探针 probe&#xff1a;k8s对容器执行的定期检查&#xff0c;诊断。 探针的三种规则 所有的探针都是针对容器不是针对pod 1、 存活探针---livenessProbe&#xff1a;探测容器是否正常运行。如果发现探测失败&#xff0c;会杀掉容器。容器会根据重启策略…...

4.6 BOUNDARY CHECKS

我们现在扩展了tile矩阵乘法内核&#xff0c;以处理具有任意宽度的矩阵。扩展必须允许内核正确处理宽度不是tile宽度倍数的矩阵。通过更改图4.14中的示例至33 M、N和P矩阵&#xff0c;图4.18创建了矩阵的宽度为3&#xff0c;不是tile宽度&#xff08;2&#xff09;的倍数。图4.…...

Java集合-LinkedList

Java集合-LinkedList 特性 public class LinkedList<E> extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable1、继承于 AbstractSequentialList &#xff0c;本质上面与继承 AbstractList 没有什么区别…...

2023年阿里云云栖大会:前沿技术发布与未来展望

在2023年的阿里云云栖大会上&#xff0c;我见证了云计算和人工智能领域的又一历史性时刻。这次大会不仅是对未来科技趋势的一次深入探索&#xff0c;更是阿里云技术实力和创新能力的集中展示。 首先&#xff0c;千亿级参数规模的大模型通义千问2.0的发布&#xff0c;无疑将人工…...

houdini microscope

【英文原版-无字幕】Wavelets: a mathematical microscope 小波变换最好的入门教程了吧&#xff01;_哔哩哔哩_bilibili 只涉及模拟&#xff0c;不模拟具体对错...

Linux_CentOS_7.9配置时区及NTPdate同步之简易记录

前言&#xff1a;ntpdate命令来自英文词组”NTPdate“的拼写&#xff0c;其功能是用于设置日期和时间。ntpdate命令能够基于NTP协议设置Linux系统的本地日期和时间&#xff0c;利用NTP服务的时钟过滤器来选择最优方案&#xff0c;大大提高了可靠性和精度&#xff0c;让系统时间…...

十九:爬虫最终篇-平安银行商城实战

平安银行商场实战 需求 获取该商城商品信息 目标网址 https://m.yqb.com/bank/product-item-50301196.html?mcId1583912328849970&loginModepab&historyy&sceneModem&traceid30187_4dXJVel1iop详细步骤 1、寻找数据接口 2、对比payload寻找可疑参数 3、多…...

解决vcruntime140_1.dll无法继续执行代码的方法,一键修复dll文件丢失问题。

vcruntime140_1.dll是Windows操作系统中的一个重要的动态链接库文件&#xff0c;它与Microsoft Visual C Redistributable相关联。电脑出现关于vcruntime140_1.dll无法继续执行代码的错误弹窗是就意味着这个文件在电脑中被破坏导致丢失了&#xff0c;这将会影响一些程序不能正常…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...