每个程序在手机上运行时,或多或少会需要使用一些手机的存储空间去存储一些用户数据或临时缓存数据等等,通常在存储设备上创建文件或目录,都会成功。但也会有失败的时候,下面会列举一些创建文件或目录失败,常见和奇葩的原因。
1.权限忘记添加:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.使用mkdir函数创建目录,但其父目录未存在,则会创建失败,使用的时候需要注意,推荐用mkdirs函数。
3.在有权限的情况下,在SD卡跟目录下创建目录或文件失败,但是在SD卡的Anroid目录下创建目录或文件可以成功,原因未知。
4.最后一种最奇葩,在有些手机上(例如华为某机型)会突然莫名的不能在SD卡上创建文件,不论何种方式都会失败,只有重启手机后,一切恢复正常,此问题暂时没有找到原因,应该是设备的问题…
所以还是在SD卡的Anroid目录下创建目录或文件存储的成功率是最高的,通过Context.getExternalFilesDir()获取,对应路径是”SDCard/Android/data/应用包名/files/”。
关于SD卡的读写权限,原则上是能少申请就少申请。在API大于19的时候,使用getExternalFilesDir获取的目录,可以不申请权限。小于19则需要申请,具体应该这样写
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18"/>
在Android中该在哪存储或缓存程序数据?
若缓存图片,文字数据等临时文件,推荐使用getExternalCacheDir获取的目录;若存储数据的话推荐用getExternalFilesDir目录。以上目录当程序卸载时也会自动清理,非常方便。