无法将位图写入 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(),以确保所有字节都写入磁盘.

然后,使用 MediaScannerConnectionscanFile()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);
                }
            });