我们还应该使用 MediaStore.Images.Media.insertImage() 方法吗?

Should we still use MediaStore.Images.Media.insertImage() method?

我在 android 中看到很多关于将图像保存到画廊的讨论,我想知道 MediaStore 是否仍然是一个很好的处理方式?

谢谢,

我从来没有推荐过这种方法,原因很简单:你不知道图像会在哪里结束。

相反,将图像保存到某个已知的、可控制的位置,然后使用 MediaScannerConnectionMediaStore 知道该图像。如果您让用户控制位置,您的应用程序只需为没有单独配置的用户提供默认位置,即可获得加分。

使用 MediaStore.Images.Media.insertImage(...) 你将得到两个文件。 CommonsWare 建议的操作方法如下:

// ...
// (save your image as usual to your custom location)
// ...

// notify mediascanner of the new image
MediaScannerConnection.scanFile(getApplicationContext(),
                            new String[] { yourFilePath }, null,
                            new MediaScannerConnection.OnScanCompletedListener() {
                                public void onScanCompleted(String path, Uri uri) {
                                    Log.i("ExternalStorage", "Scanned " + path + ":");
                                    Log.i("ExternalStorage", "-> uri=" + uri);
                                }
                            });

由于此方法 MediaStore.Images.Media.insertImage() 弃用 ,最好使用新方法,例如:

val mDrawable: Drawable? = baseContext.getDrawable(id)
val mbitmap = (mDrawable as BitmapDrawable).bitmap
val mfile = File(externalCacheDir, "myimage.PNG")
        try {
            val outStream = FileOutputStream(mfile)
            mbitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream)
            outStream.flush()
            outStream.close()
        } catch (e: Exception) {
            throw RuntimeException(e)
        }