【发布时间】:2019-06-15 00:45:54
【问题描述】:
我正在尝试从 Android 中的相机拍摄照片,我想使用 UUID 以自定义文件名保存它(例如:f12b5700-1d92-11e9-ab14-d663bd873d93.jpg)。
在下面的代码中,在onActivityResult 中,我确实在 photoPath 中得到了 f12b5700-1d92-11e9-ab14-d663bd873d93.jpg 但是当我检查设备上的实际图像时,它被保存了作为 timestamp.jpg(例如:1548082653944.jpg)。我的问题是如何使图像以自定义名称保存?
private var photoURI: Uri? = null
private fun takePhoto()
{
val values = ContentValues()
values.put(MediaStore.Images.Media.TITLE, UUID.randomUUID().toString() + ".jpg")
photoURI = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(packageManager) != null)
{
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
startActivityForResult(intent, PHOTO_REQUEST_CODE);
}
}
在 onActivityResult 处理程序中,代码如下所示:
if (requestCode == PHOTO_REQUEST_CODE)
{
if (resultCode == Activity.RESULT_OK)
{
val proj = arrayOf(MediaStore.Images.Media.TITLE)
val cursor = contentResolver.query(photoURI!!, proj, null, null, null)
val index = cursor!!.getColumnIndex(MediaStore.Images.Media.TITLE)
cursor.moveToFirst()
photoPath = cursor.getString(index)
cursor.close()
Toast.makeText(this, photoPath, Toast.LENGTH_LONG).show()
}
else
{
capturedImage.setImageURI(null)
Toast.makeText(this, "Photo was not taken", Toast.LENGTH_SHORT).show()
}
}
【问题讨论】:
-
您的意思是直接保存为
timestamp.jpg还是保存为2019-01-21T15:35.jpg(或类似名称)? -
另存为1548082653944.jpg
-
同样适用于
uuid.jpg..?请把你的问题说清楚! -
很抱歉。我已经更新了这个问题。我想将其保存为例如:f12b5700-1d92-11e9-ab14-d663bd873d93.jpg
-
将
ContentValues和contentResolver.insert()替换为FileProvider。见this sample app。
标签: android kotlin android-camera