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
<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()方法,還用戶一個乾淨整齊的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...