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

flutter学习-day21-使用permission_handler进行系统权限的申请和操作

文章目录

  • 1. 介绍
  • 2. 环境准备
    • 2-1. Android
    • 2-2. iOS
  • 3. 使用

1. 介绍

在大多数操作系统上,权限不是在安装时才授予应用程序的。相反,开发人员必须在应用程序运行时请求用户的许可。在 flutter 开发中,则需要一个跨平台(iOS, Android)的 API 来请求权限和检查他们的状态,这时候就需要使用 flutter 插件permission_handler来帮忙了。它允许您请求和检查权限。你还可以打开设备的应用程序设置,以便用户授予权限。

2. 环境准备

项目更目录打开运行窗口,安装插件:

flutter pub add permission_handler

当在运行时请求权限时,你仍然需要告诉操作系统你的应用程序可能会使用哪些权限。这需要在 Android 和 ios 特定文件中添加权限配置。

2-1. Android

  1. 检查你的 android 目录下的 gradle.properties 文件,是否有下列代码:
android.useAndroidX=true
android.enableJetifier=true
  1. 检查你的 android/app 目录下的 build.gradle 文件,是否有下列代码:
android {compileSdkVersion 33# 省略代码……
}
  1. 添加需要的权限到 android/app/src/main 目录下 AndroidManifest.xml 文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android"><!-- 网络权限 --><uses-permission android:name="android.permission.INTERNET" /><!-- 写权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 读权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /># 省略代码……
</manifest>

2-2. iOS

  1. 检查你的 ios 目录下的 podfile 文件,添加下列代码:
# 权限配置开始config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)',## 仅允许写入日历的权限(iOS 16 及以下)# 'PERMISSION_EVENTS=1',## 允许完全访问日历的权限(iOS 17及以上)# 'PERMISSION_EVENTS_FULL_ACCESS=1',## 提醒事项权限# 'PERMISSION_REMINDERS=1',## 联系人权限# 'PERMISSION_CONTACTS=1',## 相机权限# 'PERMISSION_CAMERA=1',## 麦克风权限# 'PERMISSION_MICROPHONE=1',## 语音识别权限# 'PERMISSION_SPEECH_RECOGNIZER=1',## 照片权限# 'PERMISSION_PHOTOS=1',## 位置权限组(包括始终、使用中)# 'PERMISSION_LOCATION=1',## 通知权限# 'PERMISSION_NOTIFICATIONS=1',## 媒体库权限# 'PERMISSION_MEDIA_LIBRARY=1',## 传感器权限# 'PERMISSION_SENSORS=1',## 蓝牙权限# 'PERMISSION_BLUETOOTH=1',## 应用跟踪透明度权限# 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',## 关键警报权限# 'PERMISSION_CRITICAL_ALERTS=1']# 权限配置结束end
  1. 打开 ios/Runner 目录中的 Info.plist 文件,添加需要的权限
权限名Info.plist 的键指令 Macro
日历权限(< iOS 17)NSCalendarsUsageDescriptionPERMISSION_EVENTS
日历写权限(iOS 17+)NSCalendarsWriteOnlyAccessUsageDescriptionPERMISSION_EVENTS
日历完全访问权限(iOS 17+)NSCalendarsFullAccessUsageDescriptionPERMISSION_EVENTS_FULL_ACCESS
提醒事项权限NSRemindersUsageDescriptionPERMISSION_REMINDERS
联系人权限NSContactsUsageDescriptionPERMISSION_CONTACTS
相机权限NSCameraUsageDescriptionPERMISSION_CAMERA
相册权限NSPhotoLibraryAddUsageDescription-
麦克风权限NSMicrophoneUsageDescriptionPERMISSION_MICROPHONE
语音识别权限NSSpeechRecognitionUsageDescriptionPERMISSION_SPEECH_RECOGNIZER
照片权限NSPhotoLibraryUsageDescriptionPERMISSION_PHOTOS
位置权限NSLocationUsageDescription,PERMISSION_LOCATION
始终使用位置权限NSLocationAlwaysAndWhenInUseUsageDescriptionPERMISSION_NOTIFICATIONS
仅在使用时使用位置权限NSLocationWhenInUseUsageDescriptionPERMISSION_NOTIFICATIONS
通知权限PermissionGroupNotificationPERMISSION_NOTIFICATIONS
媒体库权限NSAppleMusicUsageDescription(需要与一个字符串(string)配对使用)-
媒体库权限kTCCServiceMedia-
<!-- 保存图片到相册 -->
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Please allow the APP to save photos to the album</string>

3. 使用

注意,获取存储权限的系统弹框只会出现一次,假如第一次不同意,下次再申请就需要自己写确认框引导用户打开 app 权限的页面:openAppSettings()。

import 'package:flutter/foundation.dart';
import 'package:permission_handler/permission_handler.dart';/// 获取存储权限
Future<bool> getStoragePermission() async {late PermissionStatus myPermission;/// 读取系统权限if (defaultTargetPlatform == TargetPlatform.iOS) {myPermission = await Permission.photosAddOnly.request();} else {myPermission = await Permission.storage.request();}if (myPermission != PermissionStatus.granted) {return false;} else {return true;}
}void checkPermission() async {// 请求存储权限final permissionState = await getStoragePermission();if (permissionState) {// 权限被授予} else {// 权限被拒绝 打开手机上该App的权限设置页面openAppSettings();}
}

结果如下图所示:
申请权限弹窗

权限申请成功


本次分享就到这儿啦,我是鹏多多,如果您看了觉得有帮助,欢迎评论,关注,点赞,转发,我们下次见~

往期文章

  • flutter学习-day1-环境搭建和启动第一个项目
  • flutter学习-day12-可滚动组件和监听
  • Vue2全家桶+Element搭建的PC端在线音乐网站
  • vue3+element-plus配置cdn
  • 助你上手Vue3全家桶之Vue3教程
  • 助你上手Vue3全家桶之VueX4教程
  • 助你上手Vue3全家桶之Vue-Router4教程
  • 超详细!Vue的九种通信方式
  • 超详细!Vuex手把手教程
  • 使用nvm管理node.js版本以及更换npm淘宝镜像源
  • vue中利用.env文件存储全局环境变量,以及配置vue启动和打包命令
  • 超详细!Vue-Router手把手教程

个人主页

  • CSDN
  • GitHub
  • 简书
  • 博客园
  • 掘金

相关文章:

flutter学习-day21-使用permission_handler进行系统权限的申请和操作

文章目录 1. 介绍2. 环境准备2-1. Android2-2. iOS 3. 使用 1. 介绍 在大多数操作系统上&#xff0c;权限不是在安装时才授予应用程序的。相反&#xff0c;开发人员必须在应用程序运行时请求用户的许可。在 flutter 开发中&#xff0c;则需要一个跨平台(iOS, Android)的 API 来…...

虹科方案丨L2进阶L3,数据采集如何助力自动驾驶

来源&#xff1a;康谋自动驾驶 虹科方案丨L2进阶L3&#xff0c;数据采集如何助力自动驾驶 原文链接&#xff1a;https://mp.weixin.qq.com/s/qhWy11x_-b5VmBt86r4OdQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 12月14日&#xff0c;宝马集团宣布&#xff0c;搭载…...

Kubernetes 学习总结(42)—— Kubernetes 之 pod 健康检查详解

Kubernetes 入门 回想 2017 年刚开始接触 Kubernetes 时&#xff0c;碰到 Pod一直起不来的情况&#xff0c;就开始抓瞎。后来渐渐地掌握了一些排查方法之后&#xff0c;这种情况才得以缓解。随着时间推移&#xff0c;又碰到了问题。有一天在部署某个 springboot 微服务时&…...

【后端】Docker学习笔记

文章目录 Docker一、Docker安装&#xff08;Linux&#xff09;二、Docker概念三、Docker常用命令四、数据卷五、自定义镜像六、网络七、DockerCompose Docker Docker是一个开源平台&#xff0c;主要基于Go语言构建&#xff0c;它使开发者能够将应用程序及其依赖项打包到一个轻…...

UE5.1_Gameplay Debugger启用

UE5.1_Gameplay Debugger启用 重点问题&#xff1a; Gamplay Debugger启用不知道&#xff1f; Apostrophe、Tilde键不知道是哪个&#xff1f; Gameplay调试程序 | 虚幻引擎文档 (unrealengine.com) Gameplay Debugger...

【论文阅读+复现】SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models

SparseCtrl:在文本到视频扩散模型中添加稀疏控制。 &#xff08;AnimateDiff V3&#xff0c;官方版AnimateDiffControlNet&#xff0c;效果很丝滑&#xff09; code&#xff1a;GitHub - guoyww/AnimateDiff: Official implementation of AnimateDiff. paper&#xff1a;htt…...

速盾cdn:ddos防护手段

速盾CDN采用多种手段来进行DDoS防护&#xff0c;以确保网络和网站的正常运行。以下是速盾CDN可能采用的一些主要DDoS防护手段&#xff1a; 实时监测和分析&#xff1a; 速盾CDN实时监测网络流量&#xff0c;通过分析流量模式来检测异常行为&#xff0c;以迅速发现潜在的DDoS攻击…...

STL——queue容器

1.queue基本概念 概念&#xff1a;queue是一种先进先出&#xff08;First In First Out,FIFO&#xff09;的数据结构&#xff0c;它有两个出口。 队列容器允许从一端新增元素&#xff0c;从另一端移除元素。 队列中只有队头和队尾才可以被外界使用&#xff0c;因此队列不允许…...

gitLab页面打tag操作步骤

作者&#xff1a;moical 链接&#xff1a;gitLab页面打tag简单使用 - 掘金 (juejin.cn) 来源&#xff1a;稀土掘金 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 ---------------------------------------------------------------------…...

神秘的Cookie和Session

Cookie 1.Cookie是什么&#xff1f; Cookie是浏览器提供的持久化储存数据的方式。 2.从哪里来&#xff1f; Cookie从服务器中来&#xff0c;存储到客户端中。一个客户端就对应着一个浏览器。 服务器代码中决定了什么样的数据会储存到客户端中&#xff0c;通过HTTP相应的Se…...

springboot接口文档

Swagger 在Spring Boot中生成和维护接口文档的一个常用方法是使用Swagger。Swagger是一个开源软件框架,它帮助开发者设计、构建、记录和使用RESTful Web服务。下面是在Spring Boot项目中使用Swagger来创建接口文档的详细步骤:1. 添加Swagger依赖 在你的Spring Boot项目的pom…...

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈

深入浅出图解C#堆与栈 C# HeapingVS Stacking第一节 理解堆与栈 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](https://mp.csdn.n…...

Maven的使用和配置

Maven的使用和配置 起源&#xff1a; Apache 软件基金会(非营业的组织&#xff0c;把一些开源软件维护管理起来) maven 是apache的一个开源项目&#xff0c;是一个优秀的项目构建(管理)工具&#xff0c; maven 管理项目中的jar&#xff0c;以及jar与jar之间的依赖 maven 可…...

MongoDB 数据类型

目录 BSON 类型 二进制数据&#xff08;Binary Data&#xff09; ObjectId ObjectId定义 文档中的ObjectId ObjectId的单调性 字符串&#xff08;String&#xff09; 时间戳&#xff08;Timestamps&#xff09; 日期&#xff08;Date&#xff09; BSON类型的排序 数…...

Java 将 List 转换为 String常见方式

将 List 转换为 String的几种方式 使用 List的toString()方法将 List 转换为 String&#xff1b;结果前后会带有英文的中括号[]&#xff0c;如&#xff1a;[1, 2, 3, 4, 5]使用Java8 stream流中的Collections.joining()方法&#xff0c;带有逗号分隔符或自定义分隔符将集合转成…...

Redis(认识NoSQL,认识redis,安装redis,redis桌面客户端,redis常见命令,redis的Java客户端)

文章目录 Redis快速入门1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端…...

idea 出现Cannot resolve symbol ‘springframework‘解决方法

Maven手动重新加载 1&#xff09;File–>Invalidate Caches / Restart… 清理缓存&#xff0c;重启idea客户端 2&#xff09;File–>Maven–>Reload project重新从maven中加载工程依赖的组件...

ubuntu22.04安装anacoda遇到的坑

这几天把用了3年的windows10换成了ubuntu22.04 各种环境都得配置&#xff0c;本文记录下遇到的坑。 1、anacoda在ubuntu上也可以用官方也提供了安装包&#xff0c;但是没有图形界面&#xff0c;需要以命令行的方式安装和运行配置 1.1 安装&#xff1a;官网下载后&#xff0c;…...

window的OPen方法,弹窗的特征

文章目录 一、介绍二、弹窗的特征 一、介绍 window.open() 方法是 JavaScript 中的一个内置方法&#xff0c;用于在浏览器中打开一个新的窗口或标签页。 语法&#xff1a; window.open(url, name, features, replace)二、弹窗的特征 open方法参数说明: 参数说明url要载入窗…...

DFS算法查找所有路径详解

DFS算法查找所有路径详解 算法介绍 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种图遍历算法&#xff0c;它从起始节点开始&#xff0c;沿着一条路径尽可能深入&#xff0c;直到达到最深的节点&#xff0c;然后回溯到前一节点&#xff0c;继…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...