我在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/