@Throws(IOException::class)
private fun createVideoFile(): File {
// Create an image file name
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
val storageDir: File? = getExternalFilesDir(Environment.DIRECTORY_MOVIES)
return File.createTempFile(
"oogoo_${timeStamp}_",
".mp4",
storageDir
).apply {
videoPath = this.path
videoUri = this.toUri()
}
}
我使用CameraView来录制视频。当停止记录时,我得到记录的路径
D/VideoTaken:/存储/模拟/0/Android/数据/com.example.testgogoapplication/文件/电影/oogoo_20211021_125639_3062139219833544197.mp4
文件:///存储/模拟/0/Android/数据/com.example.testgogoapplication/文件/电影/oogoo_20211021_125639_3062139219833544197.mp4
在设备中找不到此路径,如何访问此路径?
如果有另一种方式来保存视频存储(最好的方式来写文件)Kotlin
使用
private fun createVideoOutputPath(context: Context): String {
val contentResolver = context.contentResolver
/** Represent the videos collection */
val videosCollection: Uri = sdkAndUp(29) { // if sdk is 29 or higher
MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} ?: MediaStore.Video.Media.EXTERNAL_CONTENT_URI
/** Represents the data values of the video to be saved */
val contentValues = ContentValues()
// Adding the file title to the content values
contentValues.put(
MediaStore.Video.Media.TITLE,
"VID_" + System.currentTimeMillis() + ".mp4"
)
// Adding the file display name to the content values
contentValues.put(
MediaStore.Video.Media.DISPLAY_NAME,
"VID_" + System.currentTimeMillis() + ".mp4"
)
/** Represents the uri of the inserted video */
val videoUri = contentResolver.insert(videosCollection, contentValues)!!
// Opening a stream on to the content associated with the video content uri
contentResolver.openOutputStream(videoUri)
/** Represents the file path of the video uri */
val outputPath = getUriRealPath(context, videoUri)!!
// Deleting the video uri to create it later with the actual video
contentResolver.delete(videoUri, null, null)
return outputPath
}
private fun getUriRealPath(contentResolver: ContentResolver, uri: Uri): String {
var filePath = ""
val cursor = contentResolver.query(uri, null, null, null, null)
if (cursor != null) {
if (cursor.moveToFirst()) {
var columnName = MediaStore.Images.Media.DATA
when (uri) {
MediaStore.Images.Media.EXTERNAL_CONTENT_URI -> {
columnName = MediaStore.Images.Media.DATA
}
MediaStore.Video.Media.EXTERNAL_CONTENT_URI -> {
columnName = MediaStore.Video.Media.DATA
}
}
val filePathColumnIndex = cursor.getColumnIndex(columnName)
filePath = cursor.getString(filePathColumnIndex)
}
cursor.close()
}
return filePath
}
此代码将视频uri插入MediaStore
,检索其文件路径,并将其从MediaStore
中删除。此路径将指向Movies目录,该目录是公共的,不需要权限。现在你可以使用这个文件路径创建一个File
对象,如下所示:val file = File(createVideoOutputPath(context))