gpt4 book ai didi

android - Android10。MediaStoreDATE_TAKEN始终返回null

转载 作者:行者123 更新时间:2023-12-02 13:43:51 25 4
gpt4 key购买 nike

我在Android 10中有问题。

在默认相机应用程序上拍照时,DATE_TAKEN返回正常值。

但是当我在代码中插入图片时,它总是返回null。

如何获得正常的DATE_TAKEN值?

//读取时

val cursor = context!!.contentResolver.query(data, null, null, null, null, null)
val date_taken = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATE_TAKEN))
Toast.makeText(context, date_taken, Toast.LENGTH_SHORT).show()

//保存代码
val now = System.currentTimeMillis()

val value = ContentValues().apply {
put(MediaStore.Images.Media.RELATIVE_PATH, DCIM/customPath)
put(MediaStore.Images.Media.DISPLAY_NAME, "image.jpeg")
put(MediaStore.Images.Media.MIME_TYPE, "image/*")
put(MediaStore.Images.Media.DATE_ADDED, now / 1000)
put(MediaStore.Images.Media.DATE_TAKEN, now)
put(MediaStore.Images.Media.IS_PENDING, 1)
}

val item: Uri = contentResolver.insert(collection, value)!!

try {
val pdf = contentResolver.openFileDescriptor(item, "w", null)

if (pdf != null) {
val inputStream = getImageInputStream(agreePaper2)
val strToByte = getBytes(inputStream)
FileOutputStream(pdf.fileDescriptor).use { it.write(strToByte) }
inputStream.close()
pdf.close()
contentResolver.update(item, value, null, null)
}
} catch (e: FileNotFoundException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}

value.clear()
value.put(MediaStore.Images.Media.IS_PENDING, 0)
contentResolver.update(item, value, null, null)

// getImageInputStream
private fun getImageInputStream(bitmap: Bitmap): InputStream {
val bytes = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes)
val bitmapData = bytes.toByteArray()

return ByteArrayInputStream(bitmapData)
}

// getBytes
private fun getBytes(inputStream: InputStream): ByteArray {
val byteBuffer = ByteArrayOutputStream()
val bufferSize = 1024
val buffer = ByteArray(bufferSize)

var len = inputStream.read(buffer)

while (len != -1) {
byteBuffer.write(buffer, 0, len);
len = inputStream.read(buffer)
}

return byteBuffer.toByteArray()
}

最佳答案

我能想到的是,您必须首先通过cursor.movetoFirst()至少移至光标中的第一个条目

另外,您也不必设置DATE_ADDED,因为它会被MediaProvider覆盖。您无需在try-catch-block中第二次更新。

关于android - Android10。MediaStoreDATE_TAKEN始终返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60916878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com