这是【Flutter 问题系列第 48 篇】,如果觉得有用的话,欢迎关注专栏。
如果想在 Flutter 中动态获取系统权限,可以使用插件 permission_handle
,这里以 permission_handle 8.1.4+2 为例,说下该插件支持的权限有哪些。
注:表格中的 ✔ 代表当前平台支持该权限,✗ 代表当前平台不支持该权限,- 代表该权限在当前平台不做任何处理。
表格中被标注红色的权限是需要你特别去注意的,具体详情在本文最后。
permission_handle 插件支持权限详情 序号权限名称解释说明AndroidiOS1calendar日历✔✔2camera相机✔✔3contacts联系人✔✔4location访问位置✔✔5locationAlways总是允许访问位置✔✔6locationWhenInUse仅在使用中允许访问位置✔✔7mediaLibrary媒体库✗✔8microphone麦克风✔✔9phone电话✔-10photos照片-✔11photosAddOnly仅添加照片-✔12reminders提醒-✔13sensors传感器✔✔14sms短信✔-15speech语音✔✔16storage存储✔✔17ignoreBatteryOptimizations忽略电池优化✔✗18notification通知✔✔19accessMediaLocation访问媒体位置✔✗20activityRecognition活动(运动)识别✔-21unknown未知✔✔22bluetooth蓝牙✔✔特别注意事项
一:针对权限 locationAlways
(总是允许访问位置)
- Android:当安卓版本小于 Android 10 时,获取的是粗略的位置,在 Android 10 或者更高版本时获取的是后台位置权限。
二:针对权限 photosAddOnly
(仅添加照片)
- 在 ios 14 或更高版本上有访问级别。
三:针对权限 activityRecognition
(活动/运动)
- 在 Android 10 或更高版本时,需要申请访问活动/运动权限,在 Android 10 以下的版本可以直接获取到活动/运动权限,不需要去申请。
当时做了一个计步功能,我自己测试机可以获取到当前走的步数,交给测试人员时没有起到作用,后来排查才知道,我的测试机是 Android 9 所以没有问题,测试人员的是 Android 11,因为我并没有写获取活动/运动的权限,所以测试人员的有了问题,也给大家长个心吧。
四:针对权限 bluetooth
(蓝牙)
- Android 允许一直访问
- 在 ios 13 或更高版本需要获取蓝牙权限,ios 13 以下的可以一直访问。
文章内容是参考插件源码翻译的,如果存在不对的地方,还望各位大神指出。
你的问题得到解决了吗?欢迎在评论区留言。
赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。
结束语 技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。 最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。