【问题标题】:Unable to write files on sdcard android无法在 sdcard android 上写入文件
【发布时间】:2011-06-10 20:43:09
【问题描述】:

我有一个将备份文件保存在 SD 卡上的应用程序。它在 HTC Nexus One 和其他 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 卡的正确路径以正确处理文件?

【问题讨论】:

  • 有错误吗?如果是这样,请将其附加到您的问题中。请注意,如果 SD 卡通过 USB 电缆安装到您的 PC,您将无法保存到 SD 卡。
  • 我在应用程序中创建了一个文件,然后将文件放入 sdcard 中......就是这样。它适用于许多手机,但例如在索尼爱立信 Xperia 上它不起作用......我需要找到正确的路径!
  • 这是否意味着什么都没发生或您收到了错误?
  • 什么都没有发生...应用冻结
  • ...我得到了类似 mnt/sdcard 的路径,但这不是真正的路径...它们真的很烂!

标签: android android-sdcard


【解决方案1】:

当您说“它不起作用”时......究竟会发生什么?你的意思是程序运行没有抱怨,但文件没有写入 sdcard,还是你的意思是别的?

如果文件根本没有到达那里,那不是您的错,而是手机制造商的错。我见过几个从 getExternalStorageDirectory() 返回“/mnt/sdcard”的设备,但这并不是真正的 sdcard 路径!例如,在至少一台摩托罗拉设备和三星 Galaxy Tab (7") 上,即使这指向内部存储,也会返回 /mnt/sdcard,并且每个设备上的外部存储都是 /mnt/sdcard-ext .

您对此无能为力——OEM 在欺骗您。如果你想破解一个变通办法,你可以阅读 /proc/mounts 并尝试找到 sdcard 的实际路径,但 /mnt/sdcard 也会出现在那里,并且没有保证的方法来区分真相所有设备。

【讨论】:

  • 但是我怎样才能获得正确的 sdcard 路径...我在应用程序中创建了一个文件,然后将文件放入 sdcard...就这样。
  • 不幸的是,当设备制造商向您撒谎(通过将内部路径报告为外部存储)时,您无法在代码中做很多事情来确定设备在撒谎。您可以进行 hack,但与许多 hack 一样,当您的代码在不同的设备或不同的操作系统版本上运行时,它会受到破坏。这样的黑客将检测 /mnt/sdcard-ext 作为已安装设备存在,如果是,则使用它。这适用于某些设备,但我不知道其他设备。
【解决方案2】:

通常,Android 不允许您将文件直接写入 SDCard 的根目录。您必须在 SDCard 根目录中创建一个文件夹,然后将您的文件写入新创建的文件夹中。

试试这个,它应该可以工作。

【讨论】:

    【解决方案3】:

    我有 Sony Xperia tipo dual 和这个:

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

    还有这个:

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

    两者都工作正常。 (我是在 Native 中完成的)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多