轉(zhuǎn):https://blog.csdn.net/luoguopeng/article/details/72832567
android app目錄: SDCard/Android/data/你的應(yīng)用的包名/
原來(lái),只要把文件寫(xiě)在這里的話(huà),可以不用動(dòng)態(tài)申請(qǐng)權(quán)限,只要在manifest里面聲明權(quán)限就ok了;
應(yīng)用程序在運(yùn)行的過(guò)程中如果需要向手機(jī)上保存數(shù)據(jù),一般是把數(shù)據(jù)保存在SDcard中的。
大部分應(yīng)用是直接在SDCard的根目錄下創(chuàng)建一個(gè)文件夾,然后把數(shù)據(jù)保存在該文件夾中。
這樣當(dāng)該應(yīng)用被卸載后,這些數(shù)據(jù)還保留在SDCard中,留下了垃圾數(shù)據(jù)。
并且在API
6.0之后,根目錄文件存儲(chǔ)是需要用戶(hù)授權(quán)的,就算你在AndroidManifest.xml中配置了存儲(chǔ)權(quán)限,用戶(hù)不授權(quán)也是寫(xiě)不進(jìn)去了。
SD卡讀寫(xiě)權(quán)限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>'''
如果你想讓你的應(yīng)用被卸載后,與該應(yīng)用相關(guān)的數(shù)據(jù)也清除掉,該怎么辦呢?
通過(guò)
context.getExternalFilesDir()
可以得到
SDCard/Android/data/你的應(yīng)用的包名/files/
這個(gè)目錄里面,一般放一些長(zhǎng)時(shí)間保存的數(shù)據(jù)
方法可以獲取到 SDCard/Android/data/你的應(yīng)用的包名/files/ 目錄,一般放一些長(zhǎng)時(shí)間保存的數(shù)據(jù)
通過(guò)
context.getExternalCacheDir()
方法可以獲取到
SDCard/Android/data/你的應(yīng)用包名/cache/
這個(gè)目錄里面,一般存放臨時(shí)緩存數(shù)據(jù)
如果使用上面的方法,當(dāng)你的應(yīng)用在被用戶(hù)卸載后,SDCard/Android/data/你的應(yīng)用的包名/ 這個(gè)目錄下的所有文件都會(huì)被刪除,不會(huì)留下垃圾信息。并且
這個(gè)方法獲得的文件存儲(chǔ)路徑適用于6.0以后系統(tǒng),只要AndroidManifest.xml配置讀寫(xiě)權(quán)限了,就不需要用戶(hù)再授權(quán)了。
正常開(kāi)發(fā)中獲取存儲(chǔ)路徑的方法是:
public String getDiskCacheDir(Context context) {
String cachePath = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalCacheDir().getPath();
} else {
cachePath = context.getCacheDir().getPath();
}
return cachePath;
}
可以看到,當(dāng)SD卡存在或者SD卡不可被移除的時(shí)候,就調(diào)用getExternalCacheDir()方法來(lái)獲取緩存路徑,否則就調(diào)用getCacheDir()方法來(lái)獲取緩存路徑。前者獲取到的就是 /sdcard/Android/data/<application package>/cache 這個(gè)路徑,而后者獲取到的是 /data/data/<application package>/cache 這個(gè)路徑。
設(shè)置->應(yīng)用->應(yīng)用詳情里面的”清除數(shù)據(jù)“與”清除緩存“選項(xiàng)分別對(duì)應(yīng)的是data/data/<application package>/和data/data/<application package>/cache
external storage (外部存儲(chǔ)):
Environment.getExternalStorageDirectory()SD根目錄:/mnt/sdcard/ (6.0后寫(xiě)入需要用戶(hù)授權(quán))
context.getExternalFilesDir(dir)路徑為:/mnt/sdcard/Android/data/< package name >/files/…
context.getExternalCacheDir()路徑為:/mnt/sdcard//Android/data/< package name >/cache/…
internal storage(內(nèi)部存儲(chǔ)):
context.getFilesDir()路徑是:/data/data/< package name >/files/…
context.getCacheDir()路徑是:/data/data/< package name >/cach/…