1. 程式人生 > >Android Environment.getExternalStorageDirectory() 獲取的是內部儲存還是外部儲存?

Android Environment.getExternalStorageDirectory() 獲取的是內部儲存還是外部儲存?

這幾天在做Android應用的遠端更新功能,將下載的更新包放在移動裝置上指定的目錄。用的是  Environment.getExternalStorageDirectory() 這個方法,然後在獲取的目錄中新建一個hkapp資料夾,用來存放下載的apk檔案。

那麼,這個hkapp檔案到底是在那塊儲存區域呢?

一開始,看看網上的API,已經這個方法的字面意思,想當然地以為它就是獲取SD卡上的目錄,而不是手機的內部儲存。當然,除了望文生義之外,似乎還有確鑿的證據支援我的觀點,那就是在執行的時候報錯,提示許可權不足,也就是要配置訪問外部儲存的許可權:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
嗯,看上去就是在獲取SD卡了...

我有兩個手機:

1. 華為C8812,帶SD卡,接上電腦之後顯示有兩個儲存裝置,並且識別為磁碟,其中,H盤是手機自帶的,而I盤就是後來放進去的SD卡。



在程式中用了getExternalStorageDirectory()方法之後,發現hkapp資料夾的實際位置是在I盤,也就是SD卡上,OK,看上去這個getExternalStorageDirectory方法確實是獲取了SD卡,而不是手機自帶的儲存。

2. 華為C8817,不帶SD卡,接上電腦之後只顯示一個裝置,並且,是作為裝置整體來識別,而不單單是個磁碟。



在這個C8817上執行程式之前,我是有點小擔心的,因為這個手機沒有SD卡啊,會不會執行到一半報錯呢?那麼實際的情況是,確實報錯了,但報的是沒有許可權訪問外部儲存的錯,於是也把許可權加上去:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
然後就想了,給了你許可權又有什麼用呢?反正你終究是沒有SD卡在裡面,必然要繼續報錯嘛。於是重新執行,發現整個下載過程一切正常,沒有報錯!hkapp資料夾也正常建立了,但位置是在我原本以為的”內部儲存“中,apk檔案也順利地進去了。

那麼,到這裡,有點錯亂了,這個”getExternalStorageDirectory()“ 到底是獲取外部儲存還是內部儲存呢?