Flutter层对于Android 13存储权限的适配问题

这篇具有很好参考价值的文章主要介绍了Flutter层对于Android 13存储权限的适配问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

感觉很久没有写博客了,不对,的确是很久没有写博客了。原因我不怎么想说,玩物丧志了。后面渐渐要恢复之前的写作节奏。今天来聊聊我最近遇到的一个问题:

Android 13版本对于storage权限的控制问题。

我们都知道,Android的每个版本更新都会伴随着搞事,也就是所谓的谷歌精英又会劝告我们来按照他们认为高效,他们认为优雅的方式来写代码,或者实现某些功能。所以在Android 13版本中,他们就对我们非常常用的storage权限伸出魔爪了。

我现在主要是开发面向海外的用户的2C应用,所以,不像国内一样,对于版本的需求可以说是非常严苛,然后这次谷歌就下了最后通牒,说如果应用不把Target SDK Version设置成33,我们就不和你玩啦= =

然后就在Storage权限这里出问题了。Android 13版本需要将storage权限细分为

  • 对图片的访问权限

  • 对视频的访问权限

  • 对音频的访问权限

但是我们项目是混编的项目,目前主要的代码都是用Flutter代码来实现了,这样就出现了一些比较尴尬的问题。

场景是这样的,在Flutter层我们希望从本地选取图片文件,在之前的版本(Android13)中,在选取文件前我们就需要判断本地存储权限的获取状况,然后根据权限的状态来确定进一步操作,比如说弹出权限请求框或者直接让用户选择本地图片。

但是在Android13及之后的版本中,对于Storage权限的请求分为三种(其实我就感觉是谷歌官方闲着没事干,来宣誓一下自己的主权):

public static final String READ_MEDIA_AUDIO = "android.permission.READ_MEDIA_AUDIO";
public static final String READ_MEDIA_IMAGES = "android.permission.READ_MEDIA_IMAGES";
public static final String READ_MEDIA_VIDEO = "android.permission.READ_MEDIA_VIDEO";

这里就会产生一个问题,就是我们如果使用Android13之前版本的请求权限的方式时,即直接请求WRITE_EXTERNAL_STORAGE权限,那么系统就会直接返回用户已经拒绝了该权限,无论用户是否曾经拒绝过该权限。

那么问题来了,如果是你,你会怎么解决这个问题:

Flutter中star比较高的解决方案是:permission_handler。它的解决思路是在Flutter层也增加如上三种权限,在需要请求的时候进行区分,这样的确可以,但是存在一个麻烦的地方。就是每次调用的时候都需要对平台进行区分,这就很恶心了。

所以在这里我并不打算对Flutter层进行修改,而是在原生层进行改动,我不会贴具体的代码,我只提供思路,因为代码是死的,人是活的。

解决这个问题我们只需要在请求storage权限的时候进行当前手机Android版本的判断,如果当前手机的版本大于Android 13,那么就同时请求上述三种权限,然后将请求结果包装成正常的storage请求结果即可。文章来源地址https://www.toymoban.com/news/detail-732688.html

到了这里,关于Flutter层对于Android 13存储权限的适配问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【flutter】使用permission_handler配置android和 iOS的权限

    flutter在pub.flutter-io.cn插件库中有很多的关于权限配置的插件,但是就我个人而言,比较推荐使用permission_handler这个插件。当我们打开permission_handler时候,往往新手小白会因为它的官网文档而弄的一头雾水,权限配置往往涉及到android和ios两个方向的相关知识,有可能大多数人就

    2024年02月12日
    浏览(43)
  • 【Android常见问题(五)】- Flutter项目性能优化

    项目迭代开发一定程度后,性能优化是重中之重,其中包括了包体积,UI 渲染、交互等多个方面。 通过 Flutter 应用的混淆为入口,我们主要探讨了UI 渲染的优化。 其中就会涉及到一个非常关健的概念 ——「FPS,Frame Per Second」即「每秒展示帧数」,它代表了应用的流畅度。

    2024年02月15日
    浏览(53)
  • android开发在android13中存储权限发生变化,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE无法使用

    原来的两个存储权限在android13中已经无法使用 在android13中读取图片需要以下权限: 视频权限: 音频权限: 如果需要访问pdf,word等其他类型文件,请使用以下权限:

    2024年02月01日
    浏览(35)
  • Flutter 第三方 flutter_screenutil(屏幕适配)

    推荐一篇写的非常不过的文章:Flutter应用框架搭建(二)屏幕适配 iPhone 12 mini 初始化 - 设置参考尺寸1 ScreenUtilInit 初始化 - 设置方式2 ScreenUtil.init 可以在每个页面设置 使用这种方式只需在使用 flutter_screenutil 前进行初始化即可,一般放在根路由即第一个页面加载的时候进行初始化

    2024年02月19日
    浏览(36)
  • 【flutter】flutter doctor -v 查看flutter配置环境问题:X cmdline-tools component is missing 以及 X Android license

    一、遇到报错: 二、异常原因: 2.1 问题1:cmdline-tools component is missing 运行flutter doctor 出现了错误,这是因为没安装cmdline-tools工具。 2.2 问题2:Android license status unknown. flutter doctor 如果提示Android license status unknown.表明没有安装android 证书。 执行命令: flutter doctor --android-lic

    2024年02月16日
    浏览(56)
  • flutter-移动端适配

    不同屏幕之间的尺寸适配 使用插件 flutter_screenutil flutter 屏幕适配方案,用于调整屏幕和字体大小的flutter插件,让你的UI在不同尺寸的屏幕上都能显示合理的布局! 安装 # add flutter_screenutil flutter_screenutil: ^5.8.4

    2024年02月12日
    浏览(33)
  • Flutter:屏幕适配

    flutter_screenutil 是一个用于在Flutter应用程序中进行屏幕适配的工具包。它旨在帮助开发者在不同屏幕尺寸和密度的设备上创建响应式的UI布局。 `flutter_screenutil``提供了一些用于处理尺寸和间距的方法,使得开发者可以根据设备的屏幕尺寸和密度来动态调整UI元素的大小和位置。

    2024年02月13日
    浏览(43)
  • Flutter & Android问题记录 - 升级Android Studio 2022.2.1版本后运行项目报错

    最近一个Flutter项目有新需求,开发时一直是在iOS设备上运行,花了几天做完后运行到Android设备测试,结果项目构建失败了。 Flutter: 3.7.11 Android Studio: 2022.2.1 Java: 17.0.6 Gradle: 7.4 Android Gradle Plugin (AGP): 4.1.3 项目构建报错日志: 报错有点眼熟,根据以往开发经验,应该是Gradle版本

    2023年04月24日
    浏览(96)
  • 关于 Android 没有文件存储权限保存文件的问题

    我发现Android 有些APP 他们不需要申请文件存储权限就可以进行文件的保存翻阅大量文章总结如下: 从 Android 10 开始,Android 引入了一种新的存储权限模型,其中应用需要明确请求运行时权限以访问外部存储。在这种情况下,许多应用程序可能需要请求 WRITE_EXTERNAL_STORAGE 权限才

    2024年01月17日
    浏览(45)
  • Flutter屏幕适配的三种方案

    做移动端开发的同学都知道,针对不同型号和尺寸的手机要进行页面的适配,且 iOS 和 Android 适配方案各不相同,那我们用 Flutter 开发要怎么处理屏幕适配呢? Flutter使用的是类似于iOS中的点pt,也就是point。我们经常说 iPhone8 的尺寸是375x667,但是它的分辨率其实是 750x1334 。因

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包