无法将位图写入 SD 卡
Unable to write Bitmap into SD Card
我正在尝试将位图写入 SD 卡(作为 Png 文件),在代码下方找到
File file = new File(getExternalFilesDir(null), "DemoFile.png");
OutputStream os = new FileOutputStream(file);
Log.d("JS", "File name -> " + file.getAbsolutePath());
//File name -> /mnt/sdcard/Android/data/com.pocmodule/files/DemoFile.png
bmp.compress(Bitmap.CompressFormat.PNG, 90, os); //here bmp is of type 'Bitmap'
os.close();
但我没有在 SD 卡中看到正在创建的文件 'DemoFile.png'。更别说 Png 文件了,我什至没有看到 SD 卡中可用的目录 'com.pocmodule'。
我的代码中是否遗漏了什么?
I mount my Device(with USB debugging mode selected) and explored the directory
这不会探索文件系统。它探讨了 MediaStore
.
已知的内容
所以,首先,在你的 FileOutputStream
上调用 flush()
,然后调用 getFD().sync()
,然后再调用 close()
,以确保所有字节都写入磁盘.
然后,使用 MediaScannerConnection
和 scanFile()
教 MediaStore
关于您的文件。
这可能仍需要您在桌面 OS 的文件资源管理器 window 中执行某种 "refresh" 操作以查看更改,甚至可能拔下并重新插入在您的设备中,由于桌面 OS 可能缓存 "directory" 内容。
感谢@CommonsWare 的帮助。我终于在 SD 卡中有了可用的 Png 文件 :)。对于任何想知道工作代码的人,请在下面找到
File file = new File(getExternalFilesDir(null), "DemoFile.png");
FileOutputStream os = new FileOutputStream(file);
Log.d("JS", "File name -> " + file.getAbsolutePath());
//Here 'bmp' is of type Bitmap
bmp.compress(Bitmap.CompressFormat.PNG, 90, os);
os.flush();
os.getFD().sync();
os.close();
MediaScannerConnection.scanFile(this,
new String[]{file.toString()}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
我正在尝试将位图写入 SD 卡(作为 Png 文件),在代码下方找到
File file = new File(getExternalFilesDir(null), "DemoFile.png");
OutputStream os = new FileOutputStream(file);
Log.d("JS", "File name -> " + file.getAbsolutePath());
//File name -> /mnt/sdcard/Android/data/com.pocmodule/files/DemoFile.png
bmp.compress(Bitmap.CompressFormat.PNG, 90, os); //here bmp is of type 'Bitmap'
os.close();
但我没有在 SD 卡中看到正在创建的文件 'DemoFile.png'。更别说 Png 文件了,我什至没有看到 SD 卡中可用的目录 'com.pocmodule'。
我的代码中是否遗漏了什么?
I mount my Device(with USB debugging mode selected) and explored the directory
这不会探索文件系统。它探讨了 MediaStore
.
所以,首先,在你的 FileOutputStream
上调用 flush()
,然后调用 getFD().sync()
,然后再调用 close()
,以确保所有字节都写入磁盘.
然后,使用 MediaScannerConnection
和 scanFile()
教 MediaStore
关于您的文件。
这可能仍需要您在桌面 OS 的文件资源管理器 window 中执行某种 "refresh" 操作以查看更改,甚至可能拔下并重新插入在您的设备中,由于桌面 OS 可能缓存 "directory" 内容。
感谢@CommonsWare 的帮助。我终于在 SD 卡中有了可用的 Png 文件 :)。对于任何想知道工作代码的人,请在下面找到
File file = new File(getExternalFilesDir(null), "DemoFile.png");
FileOutputStream os = new FileOutputStream(file);
Log.d("JS", "File name -> " + file.getAbsolutePath());
//Here 'bmp' is of type Bitmap
bmp.compress(Bitmap.CompressFormat.PNG, 90, os);
os.flush();
os.getFD().sync();
os.close();
MediaScannerConnection.scanFile(this,
new String[]{file.toString()}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});