android6.0 用户关掉sd卡读取权限的情况下, 还能做到手机缓存么?
PHP中文网
PHP中文网 2017-04-17 17:58:29
0
2
426

6.0以前感觉只要在manifest中申明了权限就可以用数据库、硬盘缓存、sp这些来做数据缓存。但是6.0后需要动态申请权限, 并且用户可以随时关掉这些权限。 那么在用户关掉或者没有允许sd卡读取权限的情况下,还能做数据缓存么(没有开启权限的话,file总是会创建失败)? 如果能的话,那该怎么做呢?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
小葫芦

兄弟,你理解错了。

可以看看官方文档。

Android的储存空间分两块:Internal storageExternal storageInternal storageExternal storage

Internal storage

总是可用的,不需要额外权限,这里的文件默认只能被我们的app所访问。
可以通过Context下的getFilesDir()方法获取到App的internal目录,通过getCacheDir()获取到internal缓存目录。

External storage

可能由于挂载外部储存器的原因导致这个空间不是总是可用。但是目前越来越多的厂商已经不允许用户自行使用SD卡来扩容,转而固定了设备的储存空间,这些储存空间仍会被分为Internal storage和External storage,不过这种情况下External storage基本上是总是可用的,你也可以使用

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

来判断External storage是否挂载。

可以通过Context下的getExternalFilesDir()方法获取到App的external目录,通过getExternalCacheDir()获取到external缓存目录。

这两个目录位于外置储存空间目录/Android/data/你的App的包名/下,你往这里面读写是不需要额外权限的(API 18以上),如果你的App的minSdkVersion <= 18,建议你在AndroidManifest.xml里加上这个权限:

<uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18"/>

但是,如果你往这个目录以外的地方读写文件,就需要运行时权限了(例如你要往External storage根目录里写一个日志文件啥的)

很多App或者第三方SDK会往External storage根目录读写缓存,分分钟逼死强迫症,看着自己手机外置SD卡根目录下各种奇奇怪怪的目录,真的很崩溃好吗?不过我相信随着6.0及以上版本Android设备占有率的不断上升,这个问题一定会慢慢解决的。

希望各位Android应用开发的同仁,尽量使用getExternalFilesDir()getExternalCacheDir()

Internal storage

总是可用的,不需要额外权限,这里的文件默认只能被我们的app所访问。
可以通过Context下的getFilesDir()方法获取到App的internal目录,通过getCacheDir()获取到internal缓存目录。🎜

External storage

🎜可能由于挂载外部储存器的原因导致这个空间不是总是可用。但是目前越来越多的厂商已经不允许用户自行使用SD卡来扩容,转而固定了设备的储存空间,这些储存空间仍会被分为Internal storage和External storage,不过这种情况下External storage基本上是总是可用的,你也可以使用🎜 rrreee 🎜来判断External storage是否挂载。🎜 🎜可以通过Context下的getExternalFilesDir()方法获取到App的external目录,通过getExternalCacheDir()获取到external缓存目录。🎜 🎜这两个目录位于外置储存空间目录/Android/data/你的App的包名/下,你往这里面读写是不需要额外权限的(API 18以上),如果你的App的minSdkVersion <= 18,建议你在AndroidManifest.xml里加上这个权限:🎜 rrreee 🎜但是,如果你往这个目录以外的地方读写文件,就需要运行时权限了(例如你要往External storage根目录里写一个日志文件啥的)🎜 🎜很多App或者第三方SDK会往External storage根目录读写缓存,分分钟逼死强迫症,看着自己手机外置SD卡根目录下各种奇奇怪怪的目录,真的很崩溃好吗?不过我相信随着6.0及以上版本Android设备占有率的不断上升,这个问题一定会慢慢解决的。🎜 🎜希望各位Android应用开发的同仁,尽量使用getExternalFilesDir()getExternalCacheDir()方法,还用户一个干净整洁的External storage。🎜
巴扎黑

可以参考博客 http://blog.csdn.net/github_3...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!