无法将任何文件保存到SDCard

时间:2015-01-10 20:49:54

标签: java android file

我知道有很多线程,但我想我都读过它们。在我的案例中没有任何帮助。首先是我的代码:

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" />

所以我无法弄清楚我的应用程序有什么问题。 我正在检查是否有卡以及我是否可以读/写它。我给了绝对的文件路径。但毕竟我的应用程序将文件保存到DCIM / MY_APP的内部存储。这是从最后的日志。

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

1 个答案:

答案 0 :(得分:0)

Android SDK引用的内容internal storageexternal storage都是板载闪存的一部分。 Android 4.4之前的Android SDK完全不支持removable storage(a.k.a。,“SD卡”)。

因此,它似乎是写到适当的地方。为什么你选择只在那里写一个字节,我不能说。

如果您希望存储数码照片,而不是手动将DCIM放入目录名称,请使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),以获取设备在数码照片中的自然位置。

此外:

  • getFD().sync()之后FileOutputStream

  • 之前致电flush()上的close()
  • 确保您在后台线程上执行所有此磁盘I / O

  • 考虑使用MediaScannerConnectionscanFile()让您的文件被MediaStore编入索引,这样当用户通过USB线将设备连接到桌面时,它就会显示出来操作系统和浏览外部存储