簡體   English   中英

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

[英]Android MediaStore : Images.Media.insertImage vs ContentResolver.insert

最近我正在使用一個相機應用程序,我需要在其中插入我在 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 中,我將能夠更快地查詢和檢索縮略圖。

任何人都使用過這兩個版本並且可以解釋何時使用其中一個?

盡管從MediaStore源代碼看來insertImage()等同於使用具有正確值的contentResolver.insert()但也被標記為已棄用。 所以你可能應該使用后者。

另請注意,從 Android Q (API 29) 開始,位置數據不再存儲在 MediaStore 數據庫中(存儲在 Exif 元數據中)。 有關 Android Q 的更多信息,請參閱媒體存儲指南。此外,如果您沒有啟用舊存儲或系統應用程序,則任何DATA字段都將被忽略。

除了上面@CodeRed 的回復之外, https ://github.com/android/storage-samples 上的相同示例代碼真的很有幫助。 在示例代碼中,我沒有看到任何 MediaStore 代碼,並且@CodeRed 上面給出的鏈接不再可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM