2014-01-13 138 views
4

我知道這可能已被回答很多次,我已經搜索,但我無法解決我的問題。每次我嘗試寫入SD卡時,似乎都會進入內部存儲器。我的代碼行只是如何將文件寫入到外部存儲(SD卡)

File root = android.os.Environment.getExternalStorageDirectory(); 
File dir = new File (root.getAbsolutePath() +"/mydir"); 
dir.mkdirs(); 

當我去我的文件,目錄總是出現在/存儲在SD卡/模擬/ 0,而不是。我擁有在清單中設置的所有權限。有沒有簡單的我失蹤?

P.S.我的設備是注3.我可以手動將文件複製到SD卡。

+0

在SDK中創建模擬器時,是否將存儲器分配給虛擬存儲卡? – Saqib

+0

@Saqib看起來他/她正在做他/她的註釋3. – keyser

+0

是的,我正在使用我的實際注3而不是模擬器。 -Mark – MAThrasher

回答

-1

您需要手動找到外部SD卡,這取決於手機。

看到這tutorial這裏有一個如何測試SD卡的不同路徑的例子。

+0

如果這解決了您的問題,請接受答案 – Sochimickox

5

如何將文件寫入到外部存儲設備(SD卡)

外部存儲設備不大多數Android設備上的「SD卡」。在SD卡

這是因爲/storage/emulated/0是外部存儲

當我去我的文件,目錄總是出現在/存儲/模擬/ 0,而不是。

報價the documentation

每一個Android兼容設備支持共享「外部存儲」,你可以用它來保存文件。這可以是可移動存儲介質(如SD卡)或內部(不可移動)存儲器。

Android SDK幾乎不支持替代存儲位置(如SD卡)。正如在相同的文檔頁面上所述,Android 4.4有一點:

有時,分配了內部存儲器的分區作爲外部存儲器的設備也可能提供SD卡插槽。當這樣的設備運行Android 4.3及更低版本時,getExternalFilesDir()方法僅提供對內部分區的訪問,並且您的應用程序無法讀取或寫入SD卡。但是,從Android 4.4開始,您可以通過調用getExternalFilesDirs()來訪問這兩個位置,這會返回一個File數組,每個位置都有條目。數組中的第一個條目被認爲是主要的外部存儲,您應該使用該位置,除非它已滿或不可用。如果您想在支持Android 4.3及更低版本的情況下訪問兩個可能的位置,請使用支持庫的靜態方法ContextCompat.getExternalFilesDirs()。這也會返回一個File數組,但總是隻包含Android 4.3及更低版本的一個條目。

+0

爲什麼這不是公認的答案? getExternalFilesDir()實際上返回仿真和物理位置(在我的Android 6設備物理上是第二個)。謝謝。這個問題找到答案並不容易。就像它出現在我的鼻子下面,在文檔:) – goodfellow

0

我在這裏張貼找到SD卡路徑(在問題的機構)

How can I properly obtain the external SD card path?

應該解決您的問題的代碼。「外部」存儲並不總是您的SD卡,因爲許多Android設備認爲外部是內部存儲器的一個分區。真正的外部存儲(您的SD卡)的路徑由設備的構造函數設置,並且沒有用於獲取它的標準API。

0

打印出來

dir.toString() 

上面,看看你會得到什麼。然後將其與

File dir = new File(getExternalFilesDir(null) + File.separator + "mydir"); 

如果你喜歡的第二個選擇,你應該得到比較(無論如何,我是)/storage/sdcard0/data/your.package.name/files/mydir及以上目錄是MYDIR,不是我的文件?