小工具知识网

当前位置: 首页 > 行业知识 > flutter-使用permission

行业知识

flutter-使用permission

2026-11-02 12:53:57 来源:互联网转载

文章目录

  • 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=trueandroid.enableJetifier=true
      1. 检查你的 android/app 目录下的 build.gradle 文件,是否有下列代码:
      android {  compileSdkVersion 33  # 省略代码……}
      1. 添加需要的权限到 android/app/src/main 目录下 AndroidManifest.xml 文件
                                  # 省略代码……

      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
      日历权限(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-
      NSPhotoLibraryAddUsageDescriptionPlease 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手把手教程

        个人主页

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

上一篇:区块链服务器怎么交易股票?

下一篇:揭秘正确书写爸爸英文表达的技巧!