做公司网站注意事项php网站开发实例教程下载
2026/1/13 11:20:45 网站建设 项目流程
做公司网站注意事项,php网站开发实例教程下载,网站是如何制作的,河北省网络营销公司提示#xff1a;解决授予管理所有文件的权限问题 文章目录前言一、需求-场景二、参考文档三、部分源码分析1、定位授权页面ManageExternalStorageDetails2、ManageExternalStorageDetails 源码分析类注释分析3、权限开关设置-setManageExternalStorageState - mAppOpsManager.…提示解决授予管理所有文件的权限问题文章目录前言一、需求-场景二、参考文档三、部分源码分析1、定位授权页面ManageExternalStorageDetails2、ManageExternalStorageDetails 源码分析类注释分析3、权限开关设置-setManageExternalStorageState - mAppOpsManager.setUidMode四、解决方案五、延伸知识点-AppOpsManager.setUidMode 对应的 ADB 命令1、完整的 ADB 命令语法基本语法OP_CODE 列表权限相关MODE 值2、实际使用示例设置所有文件访问权限存储权限相关位置权限其他常用权限3、查询和检查命令查询应用当前的权限设置重置权限查看详细权限信息4、完整的脚本示例批量设置权限脚本通过 UID 设置的脚本总结前言Android版本一直在加Android9/Android10/Android11/Android12/Android13/Android14/Android15 , 客户app 也在不断适配但是存在特别是定制产品中客户不愿意适配啥问题都让系统解决绕过一定机制、实现。这里说的就是一个常见的常见需求Android13 上面客户要求默认授予管理所有文件的权限如下问题是机器重启后这个权限仍需要重新打开才行那就是每次开机使用某些功能前都需要授权一次。一、需求-场景默认打开 授权管理所有文件的权限让App 不用每次机器重启后都需要去授权。二、参考文档推荐如下 相关权限的笔记之前了解过 让应用显示在其它应用的上层功能 这里的权限需求其实后面源码核心机制一模一样。MTK-Android12_13-显示在其它应用的上层功能默认对于授权管理所有文件的权限首先要明白这是个啥玩意基本机制其实还是Android版本的上升不同版本对权限把控不一样开发者需要跟随谷歌脚步不断适配才行管理存储设备上的所有文件Android13适配所有文件管理权限三、部分源码分析1、定位授权页面ManageExternalStorageDetails老方法这里应该是设置界面直接通过日志查看当前授权页面是哪个界面2、ManageExternalStorageDetails 源码分析类注释分析首先看一下类注释如下AppOpsManager#OP_MANAGE_EXTERNAL_STORAGE这个类就是用来处理OP_MANAGE_EXTERNAL_STORAGE/** * Class for displaying app info related to {link AppOpsManager#OP_MANAGE_EXTERNAL_STORAGE}. */但是你看AppOpsManager#O和之前的笔记MTK-Android12_13-显示在其它应用的上层功能默认 太相似了建议一起阅读其实就是一样的类型问题。3、权限开关设置-setManageExternalStorageState - mAppOpsManager.setUidMode看到这些就可以直接参考我之前的笔记了 MTK-Android12_13-显示在其它应用的上层功能默认 之前分析过一遍源码了。所以解决方案有两个四、解决方案直接执行命令adb shell appops set com.qhjy.qxh MANAGE_EXTERNAL_STORAGE allow那么就在系统启动后在代码里面执行一次命令即可。之前的笔记参考替换命令即可五、延伸知识点-AppOpsManager.setUidMode 对应的 ADB 命令AppOpsManager.setUidMode是通过代码动态修改应用权限对应的ADB命令是adb shell appops set。1、完整的 ADB 命令语法基本语法# 设置单个权限 adb shell appops setPACKAGE_NAMEOP_CODEMODE# 按 UID 设置 adb shell appops set--uidUIDOP_CODEMODEOP_CODE 列表以下是常见的操作代码对应 Android 中的权限OP_CODE描述对应权限MANAGE_EXTERNAL_STORAGE所有文件访问MANAGE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE读取外部存储READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE写入外部存储WRITE_EXTERNAL_STORAGEREQUEST_INSTALL_PACKAGES安装应用REQUEST_INSTALL_PACKAGESSYSTEM_ALERT_WINDOW悬浮窗SYSTEM_ALERT_WINDOWPOST_NOTIFICATION通知POST_NOTIFICATIONACCESS_FINE_LOCATION精确定位ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION粗略定位ACCESS_COARSE_LOCATIONCAMERA相机CAMERARECORD_AUDIO录音RECORD_AUDIOREAD_CONTACTS读取联系人READ_CONTACTSWRITE_CONTACTS写入联系人WRITE_CONTACTSREAD_CALENDAR读取日历READ_CALENDARWRITE_CALENDAR写入日历WRITE_CALENDARACTIVITY_RECOGNITION活动识别ACTIVITY_RECOGNITIONREAD_MEDIA_AUDIO读取音频READ_MEDIA_AUDIO (Android 13)READ_MEDIA_VIDEO读取视频READ_MEDIA_VIDEO (Android 13)READ_MEDIA_IMAGES读取图片READ_MEDIA_IMAGES (Android 13)SCHEDULE_EXACT_ALARM精确闹钟SCHEDULE_EXACT_ALARM权限相关MODE 值MODE值描述allow0允许ignore1忽略不询问deny2拒绝default3默认根据应用 targetSdk 决定foreground4仅前台允许2、实际使用示例设置所有文件访问权限# 给 com.example.app 授予所有文件访问权限 adb shell appops set com.example.app MANAGE_EXTERNAL_STORAGE allow # 按 UID 设置需要先获取 UID adb shell dumpsyspackagecom.example.app|grep userId# 假设 UID 是10123adb shell appops set--uid10123MANAGE_EXTERNAL_STORAGE allow存储权限相关#Android13的媒体权限 adb shell appops set com.example.app READ_MEDIA_IMAGES allow adb shell appops set com.example.app READ_MEDIA_VIDEO allow adb shell appops set com.example.app READ_MEDIA_AUDIO allow #Android12及以下的存储权限 adb shell appops set com.example.app READ_EXTERNAL_STORAGE allow adb shell appops set com.example.app WRITE_EXTERNAL_STORAGE allow位置权限# 精确定位 adb shell appops set com.example.app ACCESS_FINE_LOCATION allow # 粗略定位 adb shell appops set com.example.app ACCESS_COARSE_LOCATION allow # 设置仅前台可用 adb shell appops set com.example.app ACCESS_FINE_LOCATION foreground其他常用权限# 相机权限 adb shell appops set com.example.app CAMERA allow # 麦克风权限 adb shell appops set com.example.app RECORD_AUDIO allow # 悬浮窗权限 adb shell appops set com.example.app SYSTEM_ALERT_WINDOW allow # 安装应用权限 adb shell appops set com.example.app REQUEST_INSTALL_PACKAGES allow # 通知权限 adb shell appops set com.example.app POST_NOTIFICATION allow3、查询和检查命令查询应用当前的权限设置# 查看所有权限状态 adb shell appops get com.example.app # 查看特定权限 adb shell appops get com.example.app MANAGE_EXTERNAL_STORAGE # 查看所有应用的某个权限 adb shell appops query-op MANAGE_EXTERNAL_STORAGE all重置权限# 重置单个权限 adb shell appops reset com.example.app MANAGE_EXTERNAL_STORAGE # 重置所有权限 adb shell appops reset com.example.app # 重置所有应用的所有权限 adb shell appops reset--all查看详细权限信息# 查看AppOps服务状态 adb shell dumpsys appops # 查看特定包的详细权限信息 adb shell dumpsyspackagecom.example.app|grep-A20-B5AppOps# 查看 UID 对应的包名 adb shell cmdpackagelistpackages-U4、完整的脚本示例便于测试使用或者系统开机统一授权批量设置权限脚本#!/bin/bash # grant_permissions.sh PACKAGE_NAMEcom.example.appecho正在为 $PACKAGE_NAME 设置权限...# 存储权限根据Android版本if[$(adb shell getprop ro.build.version.sdk)-ge33];then #Android13adb shell appops set $PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow adb shell appops set $PACKAGE_NAME READ_MEDIA_IMAGES allow adb shell appops set $PACKAGE_NAME READ_MEDIA_VIDEO allow adb shell appops set $PACKAGE_NAME READ_MEDIA_AUDIO allowelse#Android12及以下 adb shell appops set $PACKAGE_NAME READ_EXTERNAL_STORAGE allow adb shell appops set $PACKAGE_NAME WRITE_EXTERNAL_STORAGE allow fi # 其他必要权限 adb shell appops set $PACKAGE_NAME CAMERA allow adb shell appops set $PACKAGE_NAME RECORD_AUDIO allow adb shell appops set $PACKAGE_NAME ACCESS_FINE_LOCATION allow adb shell appops set $PACKAGE_NAME SYSTEM_ALERT_WINDOW allow echo权限设置完成通过 UID 设置的脚本#!/bin/bash # grant_by_uid.sh PACKAGE_NAMEcom.example.app# 获取UIDUID$(adb shell dumpsyspackage$PACKAGE_NAME|grep userId|head-1|cut-d-f2|cut-d -f1)if[-z$UID];then echo未找到应用: $PACKAGE_NAMEexit1fi echo应用 $PACKAGE_NAME 的 UID 是: $UID# 通过 UID 设置权限 adb shell appops set--uid $UID MANAGE_EXTERNAL_STORAGE allow adb shell appops set--uid $UID CAMERA allow adb shell appops set--uid $UID ACCESS_FINE_LOCATION allow echo通过 UID 设置权限完成总结adb shell appops set是AppOpsManager.setUidMode的ADB对应命令自己可以尝试一下用Java API 方式去获取和设置setUidMode 权限但是我之前没有成功可以尝试一下。多看源码、多总结、多把知识点串联起来

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询