【flutter】使用permission_handler配置android和 iOS的权限
文章目录
- 前言
- 准备工作
- 一、使用步骤
- 1.使用的插件
- 2.配置权限
- 二、代码示例
- 三、结果截图
前言
flutter在pub.flutter-io.cn插件库中有很多的关于权限配置的插件,但是就我个人而言,比较推荐使用permission_handler这个插件。当我们打开permission_handler时候,往往新手小白会因为它的官网文档而弄的一头雾水,权限配置往往涉及到android和ios两个方向的相关知识,有可能大多数人就只会android或者iOS的某一端知识,在配置权限时出现屡屡不生效的问题。接下来我从零到一教你如何配置吧。
准备工作
flutter版本号:3.0.0
dart版本号:2.12.0
插件:permission_handler
一、使用步骤
1.使用的插件
permission_handler: ^9.0.2
flutter_easyloading: ^3.0.5
2.配置权限
- android
(1)将以下内容添加到“gradle.properties”文件中:(针对androidX及以上的版本)
android.useAndroidX=true
android.enableJetifier=true
(2)将以下内容添加到“AndroidManifest.xml”文件中:(针对androidX及以上的版本)
android:hardwareAccelerated="true"
(3)按需在“AndroidManifest.xml”添加本项目需要用到的权限:(本次以保存图片到本地相册举例)
<!-- 写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 读权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- ios
(1)将以下内容添加到您的文件中:Podfile
post_install do |installer|installer.pods_project.targets.each do |target|... # Here are some configurations automatically generated by flutter# Start of the permission_handler configurationtarget.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.hconfig.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 configurationend
end
(2)删除要使用的权限前面的字符。例如,如果您需要访问相册,请确保代码如下所示:#
## dart: PermissionGroup.photos'PERMISSION_PHOTOS=1',
(3)Info.plist 添加
<!-- 保存图片权限 -->
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Please allow the APP to save photos to the album</string>
二、代码示例
import 'dart:io';import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:permission_handler/permission_handler.dart';class HomePage extends StatefulWidget {const HomePage({Key? key}) : super(key: key);@overrideState<HomePage> createState() => _HomePageState();
}class _HomePageState extends State<HomePage> {/// 动态申请权限,需要区分android和ios,很多时候它两配置权限时各自的名称不同/// 此处以保存图片需要的配置为例Future<bool> requestPermission() async {late PermissionStatus status;// 1、读取系统权限的弹框if (Platform.isIOS) {status = await Permission.photosAddOnly.request();} else {status = await Permission.storage.request();}// 2、假如你点not allow后,下次点击不会在出现系统权限的弹框(系统权限的弹框只会出现一次),// 这时候需要你自己写一个弹框,然后去打开app权限的页面if (status != PermissionStatus.granted) {showCupertinoDialog(context: context,builder: (context) {return CupertinoAlertDialog(title: const Text('You need to grant album permissions'),content: const Text('Please go to your mobile phone to set the permission to open the corresponding album'),actions: <Widget>[CupertinoDialogAction(child: const Text('cancle'),onPressed: () {Navigator.pop(context);},),CupertinoDialogAction(child: const Text('confirm'),onPressed: () {Navigator.pop(context);// 打开手机上该app权限的页面openAppSettings();},),],);});} else {return true;}return false;}// 保存网络图片saveNetworkImg(String imgUrl) async {// Todo// 处理保存网络图片的逻辑EasyLoading.showToast('处理保存网络图片的逻辑');}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('home'),),floatingActionButton: FloatingActionButton(onPressed: () async{// 使用// 首先判断是否有权限,没权限就不执行了bool permission = await requestPermission();permission ? saveNetworkImg('imgUrl') : null;},child: const Icon(Icons.adb),),);}
}
三、结果截图
- android
- ios
【flutter】使用permission_handler配置android和 iOS的权限相关推荐
- 【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )
文章目录 一.Flutter 插件配置 二.Flutter 插件源码示例 三.iOS 应用配置 四.Android 应用配置 五.相关资源 一.Flutter 插件配置 Flutter 拍照示例中 , ...
- Flutter Web实战项目打造真正跨平台应用(windows,android,ios,linux,macos,web)
Flutter Web项目 Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升,支持 Web.macOS.Android 和 iOS. 这就是为什么今天我们使用在 Web. ...
- flutter制作博客展示平台,现已支持 Web、macOS 应用、Android 和 iOS
Flutter Blog Theme using Flutter | Web, macOS, Android, iOS Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升, ...
- 化解Android 和iOS“恩怨”的Flutter ,凭的是什么?
移动研发由来已久,从早期的 J2ME 开始,到后来居上的 Windows Mobile . Symbian ,小众却各领风骚的 BREW . Palm . BlackBerry ,以及当前几乎平分市场 ...
- android flutter 环境,android Flutter 1.环境配置
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 一 本地环境配置 1. 下载 1.1 下载压缩包 解压即可 1.2 git 下载 如果你是第一次在你机器上安装 Flut ...
- 推送消息不打烊--Flutter集成个推SDK实现Android和IOS原生推送
theme: condensed-night-purple highlight: a11y-dark 嗨!这里是甜瓜看代码,大家五一快乐呀,这篇文章跟大家聊聊怎么集成个推. Flutter集成个推SD ...
- Flutter 打包APP (Android IOS)
打包Android apk 参考 https://flutter.dev/docs/deployment/android https://flutterchina.club/android-relea ...
- flutter 调用原生安卓插件_Flutter 如何调用Android和iOS原生代码
分3个大步骤: 1.在flutter中调用原生方法 2.在Android中实现被调用的方法 3.在iOS中实现被调用的方法 在flutter中调用原生方法 场景,这里你希望调用原生方法告诉你一个boo ...
- flutter 调用原生安卓插件_Flutter 如何调用Android和iOS原生代码-阿里云开发者社区...
分3个大步骤: 1.在flutter中调用原生方法 2.在Android中实现被调用的方法 3.在iOS中实现被调用的方法 在flutter中调用原生方法 场景,这里你希望调用原生方法告诉你一个boo ...
最新文章
- 两台ubuntu虚拟机环境下hadoop安装配置
- saltstack实现haproxy+keepalived负载均衡+高可用(二)
- PHP artisan
- python函数(三)
- jquery mobile app案例_讲座预告 | 运动app内的个人成就、运动轨迹和社交分享对体能提升的长期效应研究...
- CloudStack的基本使用
- org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyR
- window获取历史url_Facebook 开出历史最高赏金,55,000 美元奖励十年漏洞发现者
- 初学编程者如何摆脱搭建开发环境的困扰?
- PHPExcel导出文件
- 随心所欲玩复制 详解robocopy (完)
- 从零开始的C++(操作符函数重载)
- 深入理解Java-GC机制
- 电子银行卡的优势分析
- JetBrain补丁
- 大学计算机课什么时候学,关于2020年“大学计算机基础”课程水平测试时间地点安排的通知...
- 查询-SPJ练习1参考答案
- Python实操:正态分布检验
- SQL之case when then用法(用于分类统计)
- Linux 系统设置 : insmod 命令详解