文章目录

1. 介绍2. 环境准备2-1. Android2-2. iOS

3. 使用

1. 介绍

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

2. 环境准备

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

flutter pub add permission_handler

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

2-1. Android

检查你的 android 目录下的 gradle.properties 文件,是否有下列代码:

android.useAndroidX=true

android.enableJetifier=true

检查你的 android/app 目录下的 build.gradle 文件,是否有下列代码:

android {

compileSdkVersion 33

# 省略代码……

}

添加需要的权限到 android/app/src/main 目录下 AndroidManifest.xml 文件

# 省略代码……

2-2. iOS

检查你的 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

打开 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-

NSPhotoLibraryAddUsageDescription

Please allow the APP to save photos to the album

3. 使用

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

import 'package:flutter/foundation.dart';

import 'package:permission_handler/permission_handler.dart';

/// 获取存储权限

Future 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手把手教程

个人主页

CSDNGitHub简书博客园掘金

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。