2011-06-10 136 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根目录中创建一个文件夹,然后将文件写入新创建的文件夹中。

试试这个,它应该工作。