84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
6.0以前感觉只要在manifest中申明了权限就可以用数据库、硬盘缓存、sp这些来做数据缓存。但是6.0后需要动态申请权限, 并且用户可以随时关掉这些权限。 那么在用户关掉或者没有允许sd卡读取权限的情况下,还能做数据缓存么(没有开启权限的话,file总是会创建失败)? 如果能的话,那该怎么做呢?
认证高级PHP讲师
兄弟,你理解错了。
可以看看官方文档。
Android的储存空间分两块:Internal storage和External storage
Internal storage
External storage
总是可用的,不需要额外权限,这里的文件默认只能被我们的app所访问。可以通过Context下的getFilesDir()方法获取到App的internal目录,通过getCacheDir()获取到internal缓存目录。
getFilesDir()
getCacheDir()
可能由于挂载外部储存器的原因导致这个空间不是总是可用。但是目前越来越多的厂商已经不允许用户自行使用SD卡来扩容,转而固定了设备的储存空间,这些储存空间仍会被分为Internal storage和External storage,不过这种情况下External storage基本上是总是可用的,你也可以使用
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
来判断External storage是否挂载。
可以通过Context下的getExternalFilesDir()方法获取到App的external目录,通过getExternalCacheDir()获取到external缓存目录。
getExternalFilesDir()
getExternalCacheDir()
这两个目录位于外置储存空间目录/Android/data/你的App的包名/下,你往这里面读写是不需要额外权限的(API 18以上),如果你的App的minSdkVersion<= 18,建议你在AndroidManifest.xml里加上这个权限:
外置储存空间目录/Android/data/你的App的包名/
minSdkVersion
AndroidManifest.xml
但是,如果你往这个目录以外的地方读写文件,就需要运行时权限了(例如你要往External storage根目录里写一个日志文件啥的)
很多App或者第三方SDK会往External storage根目录读写缓存,分分钟逼死强迫症,看着自己手机外置SD卡根目录下各种奇奇怪怪的目录,真的很崩溃好吗?不过我相信随着6.0及以上版本Android设备占有率的不断上升,这个问题一定会慢慢解决的。
希望各位Android应用开发的同仁,尽量使用getExternalFilesDir()和getExternalCacheDir()方法,还用户一个干净整洁的External storage。
可以参考博客 http://blog.csdn.net/github_3...
兄弟,你理解错了。
可以看看官方文档。
Android的储存空间分两块:
Internal storage
和External storage
Internal storage
总是可用的,不需要额外权限,这里的文件默认只能被我们的app所访问。
可以通过Context下的
getFilesDir()
方法获取到App的internal目录,通过getCacheDir()
获取到internal缓存目录。External storage
可能由于挂载外部储存器的原因导致这个空间不是总是可用。但是目前越来越多的厂商已经不允许用户自行使用SD卡来扩容,转而固定了设备的储存空间,这些储存空间仍会被分为Internal storage和External storage,不过这种情况下External storage基本上是总是可用的,你也可以使用
来判断External storage是否挂载。
可以通过Context下的
getExternalFilesDir()
方法获取到App的external目录,通过getExternalCacheDir()
获取到external缓存目录。这两个目录位于
外置储存空间目录/Android/data/你的App的包名/
下,你往这里面读写是不需要额外权限的(API 18以上),如果你的App的minSdkVersion
<= 18,建议你在AndroidManifest.xml
里加上这个权限:但是,如果你往这个目录以外的地方读写文件,就需要运行时权限了(例如你要往External storage根目录里写一个日志文件啥的)
很多App或者第三方SDK会往External storage根目录读写缓存,分分钟逼死强迫症,看着自己手机外置SD卡根目录下各种奇奇怪怪的目录,真的很崩溃好吗?不过我相信随着6.0及以上版本Android设备占有率的不断上升,这个问题一定会慢慢解决的。
希望各位Android应用开发的同仁,尽量使用
getExternalFilesDir()
和getExternalCacheDir()
方法,还用户一个干净整洁的External storage。可以参考博客 http://blog.csdn.net/github_3...