2014-05-07 148 views
1

我知道,對於Android 4.4,您可以使用此方法在外部存儲中創建「應用程序特定」文件夾。Android getExternalFilesDir權限

getExternalFilesDir("myfiles").getAbsolutePath(); 

它創建的文件夾 /storage/sdcard/Android/data/com.abc.zyz/files/myfiles

但是它安全創建這樣(我的首選),沒有額外文件夾「文件」?

String mfolder = Environment.getExternalStorageDirectory().getPath() + "/Android/data/" + getPackageName() + "/myfiles"; 
File sd = new File(mfolder); 
if(!sd.exists() || !sd.isDirectory()) { 
sd.mkdirs(); 
} 

我上API19模擬器運行它,並使用這兩種方法創建的文件夾,但我擔心的是,當一個真正的設備上完成,有可能是一個權限問題與第二個首選的方法做。

任何人都可以建議或使用Kitkat設備進行測試嗎?

+0

我當然不會長期依賴這個工作。另外,千萬不要使用字符串連接來創建路徑 - 使用正確的「File」構造函數。 – CommonsWare

回答

0

我在閱讀這種方式時遇到了類似的問題。 4.4之前工作正常,但在4.4它不喜歡它。

添加到您的AndroidManifest.xml文件:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

爲我工作。讓我知道它是否適合你!

+0

這不太可能是問題所在,除非WRITE_EXTERNAL_STORAGE權限(需要多年)也缺失,因爲文檔說任何聲明WRITE_EXTERNAL_STORAGE權限的應用程序都被隱式授予讀權限。 –

+0

在添加「我也是」的風險中,我已經在KitKat上實際測試了上述方法,並且它工作(不管權限設置如何)。儘管在另一個目錄中,在「應用程序」文件夾上方,它開始失敗。我發現我必須留在SD卡和內部的「app」文件夾(或子文件夾)內,否則我開始出現「拒絕訪問」異常。在 wislon

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

這將允許你寫外部存儲(即保存文件)早於18時被要求之後不需要的權限給予准許的SDK。我知道這個問題已經發布很久,但認爲答案可能會幫助別人,因爲它花了我一些時間來找出這個問題

+0

對於棒棒糖,它應該是** maxSdkVersion =「21」**。 –