最近正好用到了調用系統攝像機實現錄像還有限制時長大小的功能,找了找資料,並不難,只是大家可能用的不多,時間長有點忘了吧,記錄一下,方便你、我、他、它嘛~嘿嘿
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}")
}
}
}
}