在开发一个文件管理系统的路上,总有坑在等着你。

今天在做完加密解密功能,开始手机-U盘-SD卡中来回倒腾,开始测试自己的功能,当然了虽然测试是为了查缺补漏,但是没人想看见自己crash的。泪崩~~

今天踩的坑是,安装完app后
/storage/emulated/0/Android/data/ // 内置SD卡目录
/storage/0012-D687/Android/data/ // 外置SD卡目录
目录下没有出现我的app的包名,这不是心态崩了吗。至于我为什么会发现这个问题,就要从我在我管理的目录下面新建文件夹的时候出错了说起了。因为mkdirs()失败是不会打印错误日志的,我只能去系统文件管理里查看,结果没看见我的app,这就出事了,按照我的三观,在安装一个应用后,是能在上面的目录中自动创建目录的,默认是创建到/storage/emulated/0/Android/data/{packgename}/files 这一步的。

作为面向百度编程的人员,我自然而然的开始了一顿百度,但是都没有得到想要的结果,突然我想到是不是权限的问题,为什么我之前没想到呢,因为我已经在AndroidManifest.xml里面申请了
<uses-permission

android:name=“android.permission.WRITE_EXTERNAL_STORAGE” />
<uses-permission

android:name=“android.permission.READ_EXTERNAL_STORAGE” />
这两个权限,并且也已经动态申请过了。而且在设置-应用管理里也看见app获得了储存权限,自然就把权限这事忘了。后来去检查权限的问题实在是没别的门路了,这就是野路子的悲伤。

我使用了之前文章提到的获得U盘的权限去检测这个外置SD卡的权限,竟然真的弹出了权限申请框。也就是说这个app是真的没有对外置SD卡的权限,我一愣一愣的同意之后,没有手动增加文件夹,而是直接去查看了前面写的那两个文件目录,竟然出现了我想要的目录,而且我也能在app中手动修改这个目录下的内容了。

那么WRITE_EXTERNAL_STORAGE这个权限究竟是做了什么,如果说它仅是用来申请内部SD卡的权限,那为什么我一开始在内部SD卡路径里也没看见我的{packagename}。而再申请外置SD卡后又出现了呢。
还有一个问题就是同样的代码在我的手机上并没有这个问题,仅是动态申请
WRITE_EXTERNAL_STORAGE后就能进行所有操作了。而平板上之前也没问题,突然出现了这个问题。

写这篇文章也是为了给大家出现相同问题时候提供一个解决方案,如果有人知道是为什么,希望能分享一下,共同进步。

Logo

快速构建 Web 应用程序

更多推荐