2011-06-10 131 views
6

我有一個應用程序可以將備份文件保存在SD卡上。它在HTC Nexus One和其他Android手機上運行良好,但有些手機無法使用(閱讀或寫作)。無法在SD卡上寫文件android

在清單我已經將這個活動:

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

例如(當我設置的路徑記錄文件):

OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory() 
        + "/mydata.dat"); 
//Writing file...(It doesn't work) 

我怎樣才能獲得SD-正道正確操作文件的卡?

+0

是否有錯誤?如果是這樣,請將其附加到您的問題。請注意,如果SD卡通過USB電纜連接到PC,則無法保存到SD卡。 – Haphazard 2011-06-10 20:52:55

+0

我在應用程序中創建一個文件,然後將文件放入SD卡中...就是這樣。它適用於許多手機,但例如在索尼愛立信Xperia上它不起作用......我需要找到正確的道路! – Maxime 2011-06-10 20:57:07

+0

這是否意味着什麼都沒有發生或者您收到錯誤? – Haphazard 2011-06-10 21:03:18

回答

0

當你說「它不工作」......究竟發生了什麼?你的意思是程序運行時沒有投訴,但文件沒有寫入SD卡,或者你的意思是別的嗎?

如果文件根本沒有到達那裏,那不是你的錯,這是手機制造商的錯。我見過幾種從getExternalStorageDirectory()返回「/ mnt/sdcard」的設備,但這不是真正的SD卡路徑!例如,在至少一個摩托羅拉設備和三星Galaxy Tab(7「)上,即使這指向內部存儲器,並且每個設備上的外部存儲都是/ mnt/sdcard-ext,也會返回/ mnt/sdcard

關於這一點,你可以做的沒有什麼 - OEM向你說謊如果你需要一個解決方法,你可以閱讀/ proc/mounts並嘗試找到sdcard的實際路徑,但到/ mnt/SD卡也將出現在那裏,而且也沒有保證的方式來區分真理所有設備

+0

但我怎麼才能得到正確的SD卡路徑...我在應用程序中創建了一個文件,並且在將文件放入SD卡中之後...就是這樣。 – Maxime 2011-06-10 20:55:36

+0

不幸的是,當設備製造商對你說謊(通過報告內部路徑作爲外部存儲器)時,你不能在代碼中做太多的事情來確定設備是否在說謊。你可以投入黑客,但是像許多黑客一樣,當你的代碼運行在不同的設備或不同的操作系統版本上時,它會受到破壞。這樣的黑客會檢測到/ mnt/sdcard-ext作爲掛載設備存在,如果是這樣,則使用它。這將在一些設備上運行,但我不知道其他設備。 – mah 2011-06-14 20:56:32

-1

我有索尼XPERIA TIPO雙和這樣的:

FILE* pFile = fopen("/mnt/sdcard/mydata.dat","w+");

這:

FILE* pFile = fopen("/sdcard/mydata.dat","w+");

兩個工作正常。 (我在Native上做過)

0

一般來說,Android不允許你直接寫一個文件到SDCard的根目錄。您必須在SDCard根目錄中創建一個文件夾,然後將文件寫入新創建的文件夾中。

試試這個,它應該工作。