permission_handler 4.2.0+hotfix.2

  • Readme
  • Changelog
  • Example
  • Installing
  • 100

Flutter Permission handler Plugin #

pub package

Flutter的权限插件. 该插件提供了跨平台(iOS,Android)API来请求和检查权限.

Branch建立状态
developBuild Status
masterBuild Status

Features #

  • 检查是否授予权限.
  • 请求特定功能的权限.
  • 打开应用程序设置,以便用户可以启用权限.
  • 显示请求许可的理由(Android).

Usage #

要使用此插件,请在您的pubspec.yaml文件中添加permission_handler作为依赖项 . 例如:

dependencies:
  permission_handler: '^4.2.0+hotfix.2'

注意:从3.1.0版开始,permission_handler插件已切换到Android支持库的AndroidX版本. 这意味着您需要确保您的Android项目也已升级以支持AndroidX. 详细说明可在此处找到.

TL; DR版本为:

  1. 将以下内容添加到" gradle.properties"文件中:
android.useAndroidX=true
android.enableJetifier=true
  1. 请确保您设置的compileSdkVersion在你的"Android /应用/的build.gradle"文件,以28:
android {
 compileSdkVersion 28

 ...
}
  1. 确保替换所有的android. 依赖于其AndroidX对应版本(完整列表可在此处找到: https//developer.android.com/jetpack/androidx/migrate) .

Android and iOS specific permissions #

为了使该插件正常工作,您必须将权限配置添加到AndroidManifest.xml (Android)和Info.plist (iOS)文件中. 这将告诉平台您的应用程序需要哪些硬件或软件功能. 这些权限选项的完整列表可以在我们的示例应用程序中找到:

  • AndroidManifest.xml (请注意,有一个调试版本,主版本和配置文件版本,取决于您启动应用程序的方式使用.通常,仅向main版本添加权限就足够了);
  • Info.plist

重要: 在iOS上,当您要提交应用程序时,必须包括所有权限选项. 这是因为permission_handler插件接触了所有不同的SDK,并且因为静态代码分析器(由Apple在提交应用程序时运行)检测到了此问题,并将断言是否在Info.plist找不到匹配的许可权选项. 有关此的更多信息,请参见此处 .

在iOS上,permission_handler插件使用来控制是否支持权限.

默认情况下,支持此处列出的所有权限.

您可以通过以下方式删除不使用的权限:

  1. 将以下内容添加到您的Podfile文件中:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          ... # Here are some configurations automatically generated by flutter
    
          # You can remove unused permissions here
          # for more infomation: https://github.com/BaseflowIT/flutter-permission-handler/blob/develop/ios/Classes/PermissionHandlerEnums.h
          # e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0'
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
            '$(inherited)',
    
            ## dart: PermissionGroup.calendar
            # 'PERMISSION_EVENTS=0',
    
            ## dart: PermissionGroup.reminders
            # 'PERMISSION_REMINDERS=0',
    
            ## dart: PermissionGroup.contacts
            # 'PERMISSION_CONTACTS=0',
    
            ## dart: PermissionGroup.camera
            # 'PERMISSION_CAMERA=0',
    
            ## dart: PermissionGroup.microphone
            # 'PERMISSION_MICROPHONE=0',
    
            ## dart: PermissionGroup.speech
            # 'PERMISSION_SPEECH_RECOGNIZER=0',
    
            ## dart: PermissionGroup.photos
            # 'PERMISSION_PHOTOS=0',
    
            ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
            # 'PERMISSION_LOCATION=0',
    
            ## dart: PermissionGroup.notification
            # 'PERMISSION_NOTIFICATIONS=0',
    
            ## dart: PermissionGroup.mediaLibrary
            # 'PERMISSION_MEDIA_LIBRARY=0',
    
            ## dart: PermissionGroup.sensors
            # 'PERMISSION_SENSORS=0'
          ]
    
        end
      end
    end
    
  2. 删除Info.plist的相应权限描述

    例如,当您不需要相机许可时,只需删除" NSCameraUsageDescription"

    下面列出了PermissionThe key of Info.plist之间的关系:

    PermissionInfo.plistMacro
    PermissionGroup.calendarNSCalendarsUsageDescriptionPERMISSION_EVENTS
    PermissionGroup.remindersNSRemindersUsageDescriptionPERMISSION_REMINDERS
    PermissionGroup.contactsNSContactsUsageDescriptionPERMISSION_CONTACTS
    PermissionGroup.cameraNSCameraUsageDescriptionPERMISSION_CAMERA
    PermissionGroup.microphoneNSMicrophoneUsageDescriptionPERMISSION_MICROPHONE
    PermissionGroup.speechNSSpeechRecognitionUsageDescriptionPERMISSION_SPEECH_RECOGNIZER
    PermissionGroup.photosNSPhotoLibraryUsageDescriptionPERMISSION_PHOTOS
    PermissionGroup.location,PermissionGroup.locationAlways,PermissionGroup.locationWhenInUseNSLocationUsageDescription,NSLocationAlwaysAndWhenInUseUsageDescription,NSLocationWhenInUseUsageDescriptionPERMISSION_LOCATION
    PermissionGroup.notificationPermissionGroupNotificationPERMISSION_NOTIFICATIONS
    PermissionGroup.mediaLibraryNSAppleMusicUsageDescription,kTCCServiceMediaLibraryPERMISSION_MEDIA_LIBRARY
    PermissionGroup.sensorsNSMotionUsageDescriptionPERMISSION_SENSORS
  3. 清理和重建

API #

Requesting permission #

import 'package:permission_handler/permission_handler.dart';

Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.contacts]);

Checking permission #

import 'package:permission_handler/permission_handler.dart';

PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts);

Checking service status #

import 'package:permission_handler/permission_handler.dart';

ServiceStatus serviceStatus = await PermissionHandler().checkServiceStatus(PermissionGroup.location);

检查服务状态仅对Android上的PermissionGroup.location和iOS上的PermissionGroup.locationPermissionGroup.locationWhenInUserPermissionGroup.locationAlwaysPermissionGroup.sensors有意义. 所有其他权限组都不由单独的服务支持,并且始终返回ServiceStatus.notApplicable .

Open app settings #

import 'package:permission_handler/permission_handler.dart';

bool isOpened = await PermissionHandler().openAppSettings();

Show a rationale for requesting permission (Android only) #

import 'package:permission_handler/permission_handler.dart';

bool isShown = await PermissionHandler().shouldShowRequestPermissionRationale(PermissionGroup.contacts);

在iOS上,这将始终返回false .

List of available permissions #

定义可以检查或请求其权限的权限组.

enum PermissionGroup {
  /// The unknown permission only used for return type, never requested
  unknown,

  /// Android: Calendar
  /// iOS: Calendar (Events)
  calendar,

  /// Android: Camera
  /// iOS: Photos (Camera Roll and Camera)
  camera,

  /// Android: Contacts
  /// iOS: AddressBook
  contacts,

  /// Android: Fine and Coarse Location
  /// iOS: CoreLocation (Always and WhenInUse)
  location,

  /// Android: Microphone
  /// iOS: Microphone
  microphone,

  /// Android: Phone
  /// iOS: Nothing
  phone,

  /// Android: Nothing
  /// iOS: Photos
  photos,

  /// Android: Nothing
  /// iOS: Reminders
  reminders,

  /// Android: Body Sensors
  /// iOS: CoreMotion
  sensors,

  /// Android: Sms
  /// iOS: Nothing
  sms,

  /// Android: External Storage
  /// iOS: Nothing
  storage,

  /// Android: Microphone
  /// iOS: Speech
  speech,

  /// Android: Fine and Coarse Location
  /// iOS: CoreLocation - Always
  locationAlways,

  /// Android: Fine and Coarse Location
  /// iOS: CoreLocation - WhenInUse
  locationWhenInUse,

  /// Android: None
  /// iOS: MPMediaLibrary
  mediaLibrary

  /// Android: Check notification enable
  /// iOS: Check and request notification permission
  notification
}

Status of the permission #

定义权限组的状态

enum PermissionStatus {
  /// Permission to access the requested feature is denied by the user.
  denied,

  /// Permissions to access the feature is granted by the user but the feature is disabled.
  disabled,

  /// Permission to access the requested feature is granted by the user.
  granted,

  /// The user granted restricted access to the requested feature (only on iOS).
  restricted,

  /// Permission is in an unknown state
  unknown
  
  /// Permission to access the requested feature is denied by the user and never show selected (only on Android).
  neverAskAgain
}

Overview of possible service statuses #

为所提供的权限组定义支持服务的状态

/// Defines the state of a service related to the permission group
enum ServiceStatus {
  /// The unknown service status indicates the state of the service could not be determined.
  unknown,

  /// There is no service for the supplied permission group.
  notApplicable,

  /// The service for the supplied permission group is disabled.
  disabled,

  /// The service for the supplied permission group is enabled.
  enabled
}

Issues #

请在我们的GitHub页面上提交任何问题,错误或功能请求.

Want to contribute #

如果您想为插件做出贡献(例如,通过改进文档,解决错误或添加超酷的新功能),请仔细查看我们的贡献指南并向我们​​发送您的请求 .

Author #

Flutter的此权限处理程序插件由Baseflow开发. 您可以通过hello@baseflow.com与我们联系.

4.2.0+hotfix.2 #

  • Android:修复了一个错误, neverAskAgain错误在调用requestPermissions方法后将权限错误地报告为neverAskAgain .

4.2.0+hotfix.1 #

  • Android:修复了错误地将权限报告为neverAskAgain错误.

4.2.0 #

  • Android:方法checkPermissionStatusrequestPermissions现在支持附加的neverAskAgain状态.

4.1.0 #

  • iOS:添加了使用宏排除权限逻辑的选项. 这使开发人员可以将其应用程序提交到AppStore,而不必在其Info.plist中包括所有权限.
  • Android:支持API 26及更高版本的ANSWER_PHONE_CALLS权限;
  • Android:支持API 26及更高版本的ACCESS_MEDIA_LOCATION权限;
  • Android:稳定的Flutter同步Gradle版本(1.12.13 + hotfix.5).

4.0.0 #

  • iOS:增加了对DOCUMENTS和DOWNLOADS文件夹请求权限的支持(由于@phranck);
  • Androis:修复API 29中已弃用的PROCESS_OUTGOING_CALLS权限.

3.3.0 #

  • Android:在locationAlways组中添加对请求后台位置权限的支持.
  • Android:更新AGP,Gradle和AndroidX依赖项

3.2.2 #

  • 修复了依赖于Android上特定版本的gradle包装器的问题.

3.2.1+1 #

  • 由于Flutter SDK依赖版本1.1.6,因此恢复了"元"插件的更新.

3.2.1 #

  • 将对"元"的依赖更新为最新版本.

3.2.0 #

  • 添加对Android的"忽略电池优化"权限的支持;
  • 改善错误记录;
  • 已记录的对AndroidX的支持.

3.1.0 #

  • 在iOS和Android上获得电话许可的支持服务状态查询.

3.0.2 #

  • 修复了快速请求权限时的错误(#23);
  • 将Enums.h重命名为PermissionHandlerEnums.h,以防止与geolocator发生冲突(#104);
  • Update the Android permission request code to prevent conflicts with geolocator (#111);
  • 更新Gradle基础结构.

3.0.1 #

  • 将Swift pod标记为静态

3.0.0 #

  • 将iOS版本从Swift转换为Objective-C,从而大大减少了最终二进制文件的大小.

2.2.0 #

  • 添加了新的checkServiceStatus方法,以允许用户检查是否启用了位置服务(在Android和iOS上)和运动服务(仅适用于iOS);
  • 在检查权限状态时(使用checkPermissionStatus ),在授予或拒绝权限以及禁用位置服务(在Android和iOS上)或运动服务(仅在iOS上)时,返回PermissionStatus.disabled .

2.1.3 #

  • 修复了iOS上的错误,其中openAppSettings调用的结果总是返回false ;
  • 升级Android插件以支持AndroidX以及最新的Gradle和Kotlin版本;
  • Added Swift version number to the Podfile of the plugin;
  • 更新了抖动静态分析以符合最新建议.

2.1.2 #

  • 确保权限处理程序使用最新的iOS SDK进行编译

2.1.1 #

  • 更新到最新版本的Swift(4.2);
  • 确保在使用Apps的Podfile中设置了正确的Swift版本;
  • 更新后的状态代码分析配置,因此符合Flutter建议.

2.1.0 #

  • 添加了Android支持,以检查是否启用了位置服务. 如果位置服务未运行,则权限检查将返回PermissionStatus.DISABLED .

2.0.1 #

  • 修复依赖于com.android.support:support-compat库的错误
  • 更新二手Kotlin和Gradle版本

2.0.0 #

  • 将方法设为非静态,以便用户可以创建实例或覆盖

1.0.1 #

  • 将插件转换为库,以便开发人员不必导入其他文件;
  • 更新了README.md以修复示例代码.

1.0.0 #

  • 初始发行.

example/README.md

permission_handler_example #

演示如何使用permission_handler插件.

Getting Started #

该项目是Flutter应用程序的起点.

如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门:

要获得Flutter入门方面的帮助,请查看我们的在线文档 ,其中提供了教程,示例,有关移动开发的指南以及完整的API参考.

Use this package as a library

1. Depend on it

将此添加到包的pubspec.yaml文件中:


dependencies:
  permission_handler: ^4.2.0+hotfix.2

2. Install it

您可以从命令行安装软件包:

使用Flutter:


$ flutter pub get

另外,您的编辑器可能支持flutter pub get . 查看您的编辑器文档以了解更多信息.

3. Import it

现在,在Dart代码中,您可以使用:


import 'package:permission_handler/permission_handler.dart';
  
Popularity:
描述该程序包相对于其他程序包的受欢迎程度. [更多]
100
Health:
从静态分析得出的代码运行状况. [更多]
100
Maintenance:
反映出软件包的整洁和最新状态. [更多]
100
Overall:
以上的加权分数. [更多]
100
了解有关得分的更多信息.

我们在2020年1月21日对该程序包进行了分析,并在下面提供了得分,详细信息和建议. using: 分析已完成,状态使用以下命令 :

  • 飞镖:2.7.0
  • 高达:0.13.4
  • Flutter:1.12.13 + hotfix.5

Dependencies

Package Constraint Resolved Available
直接依赖
Dart SDK > = 2.1.0 <3.0.0
flutter 0.0.0
meta ^1.1.6 1.1.8
传递依存关系
collection 1.14.11 1.14.12
sky_engine 0.0.99
typed_data 1.1.6
vector_math 2.0.8
开发依赖
pedantic ^1.7.0

by  ICOPY.SITE