本文介绍: 场景是这样的,在Flutter我们希望从本地选取图片文件,在之前的版本(Android13)中,在选取文件我们需要判断本地存储权限获取状况,然后根据权限状态来确定进一步操作比如弹出权限请求框或者直接让用户选择本地图片解决这个问题我们需要请求storage权限时候进行当前手机Android版本判断,如果当前手机版本大于Android 13,那么就同时请求上述三种权限然后请求结果包装成正常的storage请求结果即可。感觉很久没有写博客了,不对,的确是很久没有写博客了。

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

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权限,那么系统就会直接返回用户已经拒绝了该权限,无论用户是否曾经拒绝过该权限。

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

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

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

解决这个问题我们只需要在请求storage权限的时候进行当前手机Android版本的判断,如果当前手机的版本大于Android 13,那么就同时请求上述三种权限,然后将请求结果包装成正常的storage请求结果即可

原文地址:https://blog.csdn.net/qq_31433709/article/details/133045110

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_26198.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注