无法将任何文件保存到 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 上完成所有此磁盘
考虑使用 MediaScannerConnection
和 scanFile()
让您的文件被 MediaStore
索引,这样当用户通过 USB 连接他们的设备时它就会显示连接到桌面 OS 并浏览外部存储
我知道有很多线程,但我想我已经全部阅读了。对我来说没有任何帮助。所以首先我的代码:
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()
之前在您的 请确保您在后台线程I/O 上完成所有此磁盘
考虑使用
MediaScannerConnection
和scanFile()
让您的文件被MediaStore
索引,这样当用户通过 USB 连接他们的设备时它就会显示连接到桌面 OS 并浏览外部存储
FileOutputStream
上调用 getFD().sync()