Flutter 权限申请

这篇文章是基于permission_handler 10.2.0版本写的

前言

在App开发过程中我们经常要用到各种权限,我是用的是permission_handler包来实现权限控制的。

pub地址:https://pub.dev/packages/permission_handler

 

permission_handler 权限列表

变量

Android

Ios

accessMediaLocation

允许应用程序访问任何地理位置
持久化到用户的共享集合中。

accessNotificationPolicy

允许用户访问手机的通知策略。

比如:允许应用程序打开和关闭请勿打扰。

activityRecognition

Android>=Q:活动识别
Android<Q:无

appTrackingTransparency

无无允许用户接受您的应用程序收集有关最终用户的数据,并与其他公司共享,以便在应用程序和网站之间进行跟踪。

audio

在Android T及以上版本上运行时:从外部存储读取音频文件
在Android上运行时<T:无反应

bluetooth

iOS 13及以上版本:核心蓝牙管理器的授权状态。
当运行<iOS 13或Android>时,这始终是允许的。

bluetoothAdvertise

允许用户使其他用户可以发现此蓝牙设备

bluetoothConnect

允许用户连接已配对的蓝牙设备

bluetoothScan

允许用户查找蓝牙设备

比如:BLE外围设备

calendar

日历

日历(活动)

camera

摄像头照片(相机胶卷和相机)

contacts

联系人

通讯录

criticalAlerts

覆盖振铃器的通知

ignoreBatteryOptimizations

忽略电池优化

location

精细和粗略定位核心定位(始终使用和在使用时使用)

locationAlways

Android版本<Q上:精细和粗略定位
Android >=Q :后台位置权限

核心定位-始终

当请求此权限时,用户需要首先授予“locationWhenUse”权限,单击弹出窗口上的“Allow While Using App”选项。允许权限后,用户可以请求“locationAlways”权限,并可以单击“Change to Always Allow”选项。

locationWhenInUse

精细和粗略定位

核心定位-何时使用

manageExternalStorage

允许应用程序广泛访问作用域存储中的外部存储。

只有当您的应用程序无法有效使用更隐私友好的API时,您才应请求“管理外部存储”权限。有关详细信息:https://developer.android.com/training/data-storage/manage-all-files

当隐私友好的API(即[Storage Access Framework](https://developer.android.com/guide/topics/providers/document-provider)或[MediaStore](https://developer.android.com/training/data-storage/shared/media)API)是您的应用程序所需的全部权限。[PermissionGroup.storage]是您需要请求的唯一权限。

如果需要使用“管理外部存储”权限,您必须在向Google Play商店提交应用程序时填写“权限声明表”。更多详细信息,请点击此处:https://support.google.com/googleplay/android-developer/answer/9214102#zipp

mediaLibrary

多媒体库

microphone

麦克风麦克风

nearbyWifiDevices

允许用户通过Wi-Fi连接到附近的设备

notification

通知通知

phone

手机

photos

android

Android版本>=T :从外部存储读取图像文件Android版本<T:无

照片

iOS 14+读写访问级别 

photosAddOnly

照片
iOS 14+读写访问级别

reminders

提醒

requestInstallPackages

允许应用程序请求安装软件包

scheduleExactAlarm

在Android S及以上版本上运行时:允许精确的报警功能
在Android上运行时<S:无

sensors

身体传感器核心运动

sms

sms

speech

麦克风语音

storage

外部存储访问“文档”或“下载”等文件夹。默示授予。

systemAlertWindow

允许应用程序创建显示在所有其他应用程序之上的窗口

unknown

未知仅用于返回类型,从未请求

videos

在Android T及以上版本上运行时:从外部存储读取视频文件

在Android T及以上版本下运行时:无反应

配置

Android

1.在项目根目录/android/gradle.properties文件中添加如下内容

android.useAndroidX=true
android.enableJetifier=true

 

 

2.在项目根目录/android/app/build.gradle文件中添加如下内容

android {compileSdkVersion 33...
}

我是修改了flutter_tool的配置,到Flutter的安装环境目录/flutter/packages/flutter_tools/gradle/flutter.gradle


3.在项目根目录/android/app/src/main/AndroidManifest.xml中添加所需权限即可。

ios

1.在项目根目录/ios/Profile文件中添加如下内容

post_install do |installer|installer.pods_project.targets.each do |target|... # Here are some configurations automatically generated by flutter# Start of the permission_handler configurationtarget.build_configurations.each do |config|# You can enable the permissions needed here. For example to enable camera# permission, just remove the `#` character in front so it looks like this:## ## dart: PermissionGroup.camera# 'PERMISSION_CAMERA=1'##  Preprocessor definitions can be found in: https://github.com/Baseflow/flutter-permission-handler/blob/master/permission_handler_apple/ios/Classes/PermissionHandlerEnums.hconfig.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)',## dart: PermissionGroup.calendar# 'PERMISSION_EVENTS=1',## dart: PermissionGroup.reminders# 'PERMISSION_REMINDERS=1',## dart: PermissionGroup.contacts# 'PERMISSION_CONTACTS=1',## dart: PermissionGroup.camera# 'PERMISSION_CAMERA=1',## dart: PermissionGroup.microphone# 'PERMISSION_MICROPHONE=1',## dart: PermissionGroup.speech# 'PERMISSION_SPEECH_RECOGNIZER=1',## dart: PermissionGroup.photos# 'PERMISSION_PHOTOS=1',## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]# 'PERMISSION_LOCATION=1',## dart: PermissionGroup.notification# 'PERMISSION_NOTIFICATIONS=1',## dart: PermissionGroup.mediaLibrary# 'PERMISSION_MEDIA_LIBRARY=1',## dart: PermissionGroup.sensors# 'PERMISSION_SENSORS=1',  ## dart: PermissionGroup.bluetooth# 'PERMISSION_BLUETOOTH=1',## dart: PermissionGroup.appTrackingTransparency# 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',## dart: PermissionGroup.criticalAlerts# 'PERMISSION_CRITICAL_ALERTS=1']end# End of the permission_handler configurationend
end

2.用到哪个权限取消对应的注释即可,例如

## dart: PermissionGroup.calendar'PERMISSION_EVENTS=1',

3.在Info.plist添加对应的权限以及含义即可

使用方式

获取权限是否状态

var status = await Permission.phone.status;

同时请求多个权限


Map<Permission, PermissionStatus> statuses = await [Permission.location,Permission.storage,Permission.camera,].request();print(statuses[Permission.location]);

单个权限申请

Future<bool> requestCalendarPermission() async {//获取当前的权限状态var status = await Permission.phone.status;if (status == PermissionStatus.granted) {
//已经授权return true;} else {//未授权则发起一次申请status = await Permission.phone.request();if (status == PermissionStatus.granted) {return true;} else {return false;}}}
}

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

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

相关文章

C#:时间与时间戳的转换

1、将 DateTime 转换为 Unix 时间戳&#xff08;秒&#xff09; public static long DateTimeToUnixTimestamp(DateTime dateTime) {// 定义UTC纪元时间DateTime epochStart new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);// 计算从UTC纪元时间到指定时间的总秒数Tim…

【Spring】Spring IOCDI:架构旋律中的“依赖交响”与“控制华章”

前言 &#x1f31f;&#x1f31f;本期讲解关于Spring IOC&DI的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么…

在CentOS7上更换为阿里云源

在CentOS 7上更换为阿里云YUM源可以通过以下步骤进行&#xff1a; 备份当前的YUM源配置文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载阿里云的YUM源配置文件 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirr…

【小白学机器学习34】基础统计2种方法:用numpy的方法np().mean()等进行统计,pd.DataFrame.groupby() 分组统计

目录 1 用 numpy 快速求数组的各种统计量&#xff1a;mean, var, std 1.1 数据准备 1.2 直接用np的公式求解 1.3 注意问题 1.4 用print() 输出内容&#xff0c;显示效果 2 为了验证公式的背后的理解&#xff0c;下面是详细的展开公式的求法 2.1 均值mean的详细 2.2 方差…

Oracle 19C Data Guard 单实例1+1部署(Duplicate方式)

环境描述 项目主库备库操作系统CentOS 7.9CentOS 7.9数据库版本Oracle 19.3.0.0Oracle 19.3.0.0ORACLE_UNQNAMEhishisdgIP地址10.172.1.10110.172.1.102Hostnamehisdb01hisdb02SIDhishisdb_namehishisdb_unique_namehishisdg 说明 主库和备库建议采用相同服务器配置。主库和…

ubuntu20配置mysql注意事项

目录 一、mysql安装 二、初始化配置密码 三、配置文件的位置 四、常用的mysql命令 五、踩坑以及解决方法 一、mysql安装 1.更新apt源 sudo apt update 2.安装mysql服务 sudo apt-get install mysql-server 3.初始化配置 sudo mysql_secure_installation 4.配置项 VALI…

开展网络安全成熟度评估:业务分析师的工具和技术

想象一下,您坐在飞机驾驶舱内。起飞前,您需要确保所有系统(从发动机到导航工具)均正常运行。现在,将您的业务视为飞机,将网络安全视为飞行前必须检查的系统。就像飞行员依赖检查表一样,业务分析师使用网络安全成熟度评估来评估组织对网络威胁的准备程度。这些评估可帮助…

MySql(面试题理解B+树原理 实操加大白话)

数据的定位 通过磁道和扇区定位到数据的位置 扇区为512字节 黄色地方数据位置为2磁道3扇区 黑色地方数据位置为1磁道1扇区 通过磁道和扇区还有偏移量定位到数据的位置 比如这里有一张表 由id、name、no、address组成id为主键 列占有大小&#xff08;字节&#xff09; id int …

目标检测,图像分割,超分辨率重建

目标检测和图像分割 目标检测和图像分割是计算机视觉中的两个不同任务&#xff0c;它们的输出形式也有所不同。下面我将分别介绍这两个任务的输出。图像分割又可以分为&#xff1a;语义分割、实例分割、全景分割。 语义分割&#xff08;Semantic Segmentation&#xff09;&…

K8s内存溢出问题剖析:排查与解决方案

文章目录 一、背景二、排查方案&#xff1a;1. 可能是数据量超出了限制的大小&#xff0c;检查数据目录大小2. 查看是否是内存溢出2.1 排查数据量&#xff08;查看数据目录大小是否超过limit限制&#xff09;2.2 查看pod详情发现问题 三、解决过程 一、背景 做redis压测过程中…

python3 + selenium 中用PIL获取全屏幕截图

获取当前屏幕截图非常简单&#xff0c;需要import PIL.ImageGrab。调用grab函数即可得到Image对象&#xff0c;显示图片如图所示。 高版本的PIL中的grab函数还提供有一些参数。要查看当前PIL包的版本&#xff0c;可以import然后查看其__version__属性。 如果是较高版本的PIL…

openssl编译安装升级为新版本

文章目录 1、下载版本2、上传并解压3、编译安装4、验证 1、下载版本 https://www.openssl.org/source/old/1.1.1/ 2、上传并解压 tar zxvf openssl-1.1.1s.tar.gz 3、编译安装 注意&#xff1a;要提前安装好 gcc perl cd openssl-1.1.1s ./config --prefix/usr/local/open…

请求(request)

目录 前言 request概述 request的使用 获取前端传递的数据 实例 请求转发 特点 语法 实例 实例1 实例2 【关联实例1】 域对象 组成 作用范围&#xff1a; 生命周期&#xff1a; 使用场景&#xff1a; 使用步骤 存储数据对象 获得数据对象 移除域中的键值…

2039:【例5.6】冒泡排序

【题目描述】 编程输入n(1≤n≤20)个小于1000非负整数&#xff0c;然后自动按从大到小的顺序输出。&#xff08;冒泡排序&#xff09; 【输入】 第一行&#xff0c;数的个数n; 第二行&#xff0c;n个非负整数。 【输出】 由大到小的n个非负整数&#xff0c;每个数占一行。 【输…

离线安装 Docker-IO:详细步骤指南

离线安装 Docker-IO:详细步骤指南 一、准备工作1.1 下载 Docker 离线安装包1.2 准备安装环境1.3 配置防火墙和 SELinux(可选)二、上传和解压离线安装包2.1 上传安装包2.2 解压安装包三、安装 Docker-IO3.1 移动 Docker 文件到系统目录3.2 配置 Docker 服务3.3 赋予服务文件执…

python图像彩色数字化

效果展示&#xff1a; 目录结构&#xff1a; alphabets.py GENERAL {"simple": "%#*-:. ","complex": "$B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~<>i!lI;:,\"^. " } # Full list could be found here…

.net core 创建linux服务,并实现服务的自我更新

目录 创建服务创建另一个服务&#xff0c;用于执行更新操作给你的用户配置一些systemctl命令权限 创建服务 /etc/systemd/system下新建服务配置文件&#xff1a;yourapp.service&#xff0c;内容如下&#xff1a; [Unit] Descriptionyourapp Afternetwork.target[Service] Ty…

TongWeb8 错误码查询方法及说明

TongWeb8可通 过 ./admin.[bat|sh] error-code [Error Code] 命令查 找错误码 说 明。 如&#xff1a;./admin.sh error-code 显示所有错误码说明。 ./admin.sh error-code 008 显示008错误码的说明。 Execute the command: error-code ****** TongWeb ErrorCode Info ***…

宠物空气净化器推荐2024超详细测评 希喂VS霍尼韦尔谁能胜出

最近有粉丝一直在评论区和后台探讨宠物空气净化器是不是智商税的问题&#xff0c;有人认为宠物空气净化器肯定不是智商税&#xff0c;有些人认为将其购回家就是个没用的东西&#xff0c;还占地方&#xff0c;双方各有自己的观点。 其实宠物空气净化器和普通的空气净化器是有很大…

屏幕分辨率|尺寸|颜色深度指纹

一、前端通过window.screen接口获取屏幕分辨率 尺寸 颜色深度&#xff0c;横屏竖屏信息。 二、window.screen c接口实现&#xff1a; 1、third_party\blink\renderer\core\frame\screen.idl // https://drafts.csswg.org/cssom-view/#the-screen-interface[ExposedWindow ] …