首页 > 其他分享 >Flutter 权限申请

Flutter 权限申请

时间:2024-11-30 09:04:36浏览次数:11  
标签:PermissionGroup PERMISSION ## 申请 dart Android 权限 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 configuration
    target.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.h
      config.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 configuration
  end
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;
      }
    }
  }
}

标签:PermissionGroup,PERMISSION,##,申请,dart,Android,权限,Flutter
From: https://blog.csdn.net/nonagontech/article/details/144149563

相关文章

  • TinyPro Vue v1.1.0 正式发布:增加细粒度权限管理、页签模式、多级菜单,支持 Webpack/Vi
    你好,我是Kagol,个人公众号:前端开源星球。视频教程:https://www.bilibili.com/video/BV1SUBRYGECg/为了提升前端开发效率,OpenTiny提供了一个跨平台的前端工程化CLI工具TinyCLI,为开发者提供一系列开发套件及工程插件,覆盖前端开发的整个链路,保证团队开发过程的一致性和可复制性......
  • UOS服务器版,在docker中使用elasticsearch碰到的权限问题
    对docker没研究,对elasticsearch也没研究,主打一个拿来就用,能跑就行.有些系统(主要指UOS服务器版,最近碰到)docker的版本是podman,如果直接yuminstall docker装上的可能是(因为另一台没问题)podman版本,运行起来乱七八糟问题,可以卸载podman,然后yuminstalldocker-ce......
  • RBAC, ACL, ABAC 的权限控制方式具体解释
    权限控制是确保信息系统安全的重要组成部分,它定义了用户可以访问哪些资源以及他们对这些资源能够执行的操作。RBAC(基于角色的访问控制)、ACL(访问控制列表)和ABAC(基于属性的访问控制)是三种常见的权限控制模型。下面是这三种模型的具体解释:1.RBAC(Role-BasedAccessControl)-基......
  • 如何申请域名
    标题:掌握网络门牌——域名注册的艺术与科学在数字化的浪潮中,每一次点击、每一次访问,都源自一个简单的地址——域名。它不仅是互联网的基石,更是企业与个人在线身份的象征。在这个充满无限可能的虚拟世界里,拥有一个独特且具有代表性的域名,就像在无垠的数字宇宙中找到了自己的坐标。......
  • windows下编程中的多用户、权限问题
    编程中经常遇到windows相关的多用户问题,以下通过代码进行实际验证。一、创建一个UserTest程序usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Linq;usingSystem.Security.Principal;usingSystem.Text;usingSystem.Threading.T......
  • Delphi 7 编译软件申请管理员权限
    第一步,建立manifest文件,如xx.manifest文件内容如下: <?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><assemblyxmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0"><trustInfoxmlns="......
  • 学习笔记(四十八):声明权限配置
    概述:应用在申请权限时,需要在项目的配置文件中,逐个声明需要的权限,否则应用将无法获取授权。在src/main/module.json5文件中进行权限声明配置使用示例:{"module":{"name":"entry","type":"entry","description":"$string:module_desc&q......
  • letsencrypt免费证书申请
    letsencrypt免费证书的有效期是90天,到期后重新签发证书letsencrypt免费证书介绍Let'sEncrypt是一个非营利性的证书颁发机构(CertificateAuthority,CA),由互联网安全研究组(ISRG)运作,旨在通过提供免费的SSL/TLS证书来普及互联网加密连接。证书申请certbot工具安装root@mast......
  • Linux操作系统3:用户,用户组,权限
    Linux用户,用户组,权限用户和用户组基础1.计算机通过用户名和密码识别用户;2.Linux中新建用户后,需要设置密码;3.系统中有一个特殊的用户root;4.用户组:把几个用户归在一起,这样的组被称之为用户组,规定文件所属用户组的权限可以使该组所有成员拥有这些权限。普通用户和最高管......
  • 使用certbot申请免费SSL证书
    现在网站使用https已经成为标配,但是SSL证书最便宜的DV证书也要几百块钱一年,对于个人开发者来说很不划算。好在,我们有Let'sEncrypt,它是能提供免费的SSL证书,应该也是市面上使用最广泛的免费DV证书了。原理一点开Let'sEncrypt还是有点懵的,按照在其他平台申请SSL证书的逻辑,它尽然......