备忘一例奇怪的Android11+存储权限问题

测试机:小米青春10,Android 11(EMUI 12.1.7)

最近突然发现无法写SD卡文件了,而最近主要改动就是 targetSdkVersion从26改为30及相关改动。

查了下,理论上即使targetSdkVersion为26,应该Android 11起就要求权限:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"> 

,然后修改相应权限申请代码,例如跳至系统相关权限界面等。但我由于没有发现问题就一直没这么适配(也许小米的Android 11有自己的魔改)。

然而这并不是标题说的奇怪的事情,奇怪的是:我从手机文件管理器删除了一个在上述升级前app建立的文件夹,里边还有一些文件夹和文件,结果从app里创建这个文件夹和文件返回false...

如果app新开一个其它路径的文件夹,或新建、写文件都可以,唯独这个老文件夹创建不了。然后在手机文件管理器里重新手工建立了这个文件夹,app可以在这个文件夹内创建、修改文件。

有点懵,要是用户手贱从文件管理器里删除了app创建的文件夹,app又无法重新创建成功,这不是很大的使用隐患么?

无意中发现解决办法:

重启手机即可!根据这个现象可以猜测:

系统的存储分区管理模块“记住”了app的各种存储操作和结果,包括创建文件夹;
当手工从第三方app(例如系统自带的文件管理器)删除该文件夹后,存储分区管理模块不知道,它认为app创建的该文件夹仍然存在,所以mkdir失败。
重启手机后,系统的存储分区管理模块也知道已经没有那个文件夹了,所以app又能创建刚才删除的文件夹了。

思考:
1、也许有比重启手机更简明的办法(清除app数据、重启app、重装app都是不行的);
2、也许第三方app删除本app所创建文件夹这个事件,其它安卓系统是知道的,只是我测试机的系统做的比较矬。

还有一个奇怪的问题,卸载新版app,使用targetSdkVersion为26的老版本app,被第三方app(系统自带的文件管理器)手工删除的文件夹也从app里创建不了了!而这种测试,以前在老版本上测试过很多次,是没问题的(也许是我记忆错误,再之前用的测试机是荣耀青春10,Android 10,小米青春10从来没这么测过?)。

解决办法:和上边一样,重启手机,就可以创建了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值