Android MediaStore:Images.Media.insertImage 与 ContentResolver.insert

Posted

技术标签:

【中文标题】Android MediaStore:Images.Media.insertImage 与 ContentResolver.insert【英文标题】:Android MediaStore : Images.Media.insertImage vs ContentResolver.insert 【发布时间】:2019-12-01 13:56:15 【问题描述】:

最近我正在使用一个相机应用程序,我需要在其中插入我在 MediaStore 中所做的所有图像。我看到有两种方法,但是在阅读文档后,我看不出它们之间有任何明显的区别。

使用 MediaStore

return Images.Media.insertImage(app.contentResolver, metadata.path, metadata.name, "")

使用 ContentResolver

 val contentValues = ContentValues().apply 
        put(Images.Media.DATA, metadata.path)
        put(Images.Media.MIME_TYPE, appImg.mimeType)
        put(Images.Media.DISPLAY_NAME, metadata.name)
        put(Images.Media.DATE_TAKEN, currentTime)
        put(Images.Media.DATE_ADDED, currentTime)
        put(Images.ImageColumns.SIZE, appImg.sizeInBytes)
        put(Images.Media.WIDTH, appImg.width)
        put(Images.Media.HEIGHT, appImg.height)
        appImg[MediaMetadata.Location]?.let 
            put(Images.Media.LATITUDE, it.latitude)
            put(Images.Media.LONGITUDE, it.longitude)
        
    

    return app.contentResolver.insert(Images.Media.EXTERNAL_CONTENT_URI, contentValues)

阅读一些文档我看到第二个文档也在创建一个缩略图,但它没有解释它是否永远创建它,所以它也将存储在 MediaStore 中,我将能够查询和检索缩略图更快。

任何人都使用过这两个版本,并且可以解释何时使用其中一个?

【问题讨论】:

【参考方案1】:

虽然从MediaStore 源代码看来insertImage() 等于使用具有正确值的contentResolver.insert(),但也被标记为已弃用。所以你可能应该使用后者。

另请注意,从 android Q (API 29) 开始,位置数据不再存储在 MediaStore 数据库中(它存储在 Exif 元数据中)。有关 Android Q 的更多信息,请参阅媒体存储 guide。此外,如果您没有启用旧版存储或者是系统应用,则任何 DATA 字段都将被忽略。

【讨论】:

嗨@CodeRed,我有一个具体案例的问题。如果您能抽出时间检查一下,那就太好了:***.com/questions/66148310/…【参考方案2】:

除了上面的@CodeRed 回复之外,https://github.com/android/storage-samples 的相同示例代码真的很有帮助。在示例代码中,我没有看到任何 MediaStore 代码,并且上面由@CodeRed 提供的链接不再可访问。

【讨论】:

以上是关于Android MediaStore:Images.Media.insertImage 与 ContentResolver.insert的主要内容,如果未能解决你的问题,请参考以下文章

Android之MediaStore

Android MediaStore 插入视频

android 删除相册图片并同步到图库

MediaStore.Images.Media 降低存储到画廊的图像质量

如何从MediaStore.Images.Media.getBitmap(contentResolver,uri)获取Bitmap?

获取音频文件的路径问题