最近正好用到了调用系统摄像机实现录像还有限制时长大小的功能,找了找资料,并不难,只是大家可能用的不多,时间长有点忘了吧,记录一下,方便你、我、他、它嘛~嘿嘿
1.主要方法:
private fun video() {
try {
val format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val date = Date(System.currentTimeMillis())
var videoname = format.format(date)
videoFile = File(FileUtils.downpath, videoname + ".mp4")
if (videoFile!!.exists()) {
videoFile!!.delete()
}
videoFile!!.createNewFile()
val intent = Intent(MediaStore.ACTION_VIDEO_CAPTURE)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.flags = Intent.FLAG_GRANT_WRITE_URI_PERMISSION
camera_URI = FileProvider.getUriForFile(context, Constent.Provider, videoFile!!)
} else {
camera_URI = Uri.fromFile(videoFile)
}
//储存地址
intent.putExtra(MediaStore.EXTRA_OUTPUT, camera_URI)
//用于控制录制视频的质量;0——低质量;1——高质量
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1)
//允许记录的最长时间(以 秒 为单位) 例如:限制为60S
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 60)
//允许的最大大小(以 B 为单位) 例如:限制大小为100M
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 1024L * 1024 * 100)
startActivityForResult(intent, 66)
} catch (e: Exception) {
Log_Ma.e(TAG, e.toString())
ToastUtils.showToast("启用相机失败,请重试")
}
}
2.在获取录像之后的地址信息:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
66 -> {
if (resultCode == RESULT_OK) {
val videoURL = data?.data
Log_Ma.e(TAG, "当前返回地址:${videoURL.toString()}//启动时设置的地址:${videoFile?.absolutePath}")
}
}
}
}