[英]Android - Images.Media.insertImage is turning every pixel with alpha of 0 to black
[英]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.