无法将任何文件保存到 SDCard

Can`t save any file to SDCard

我知道有很多线程,但我想我已经全部阅读了。对我来说没有任何帮助。所以首先我的代码:

File savePlace; 
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
    savePlace = Environment.getExternalStorageDirectory();
File dir = new File (savePlace.getAbsolutePath() + "/DCIM/MY_APP");
dir.mkdirs();               

String fileName = String.format("%d.jpg", System.currentTimeMillis());
File outFile = new File(dir, fileName);

outStream = new FileOutputStream(outFile);
outStream.write(data[0]);
outStream.flush();
outStream.close();

Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length + " to " + outFile.getAbsolutePath());

现在我的清单:

<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

所以我不知道我的应用程序有什么问题。 我正在检查是否有卡,以及我是否可以 read/write 到它。我正在提供文件的绝对路径。但毕竟我的应用程序将文件保存到 DCIM/MY_APP 的内部存储中。这是最后的日志。

01-10 21:35:34.005: onPictureTaken - wrote bytes: 1 to /storage/emulated/0/DCIM/MY_APP/1420922134007.jpg

Android SDK 指的是 internal storage and external storage are both part of the on-board flash. The Android SDK, prior to Android 4.4, had no support at all for removable storage (a.k.a., "SD card").

因此,它似乎是在写入正确的位置。为什么你选择在那里只写一个字节,我不能说。

不过,如果您要存储数码照片,与其手动将 DCIM 放入目录名称,不如使用 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),以获取数码照片的设备自然位置。

还有:

  • flush() 之后和 close()

  • 之前在您的 FileOutputStream 上调用 getFD().sync()
  • 请确保您在后台线程I/O 上完成所有此磁盘

  • 考虑使用 MediaScannerConnectionscanFile() 让您的文件被 MediaStore 索引,这样当用户通过 USB 连接他们的设备时它就会显示连接到桌面 OS 并浏览外部存储