override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == CREATE_DOCUMENT_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
val uri: Uri? = data?.data
if (uri != null) {
// Save the video file to the chosen location
saveVideoToUri(uri)
}
}
}
fun saveVideoToUri(uri: Uri,context:Context) {
try {
context.contentResolver.openOutputStream(uri)?.use { outputStream ->
// Write the video data to the output stream
outputStream.write(videoData)
}
} catch (e: IOException) {
e.printStackTrace()
}
}
fun createAppDirectoryInDownloads(context: Context): File? {
val downloadsDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
val appDirectory = File(downloadsDirectory, "YourAppDirectoryName")
if (!appDirectory.exists()) {
val directoryCreated = appDirectory.mkdir()
if (!directoryCreated) {
// Failed to create the directory
return null
}
}
return appDirectory
}
1.现在创建您的视频文件在您的目录使用下面的代码
companion object {
@JvmStatic
fun createFileInAppDirectory(context: Context, fileName: String): File? {
val appDirectory = createAppDirectoryInDownloads(context)
if (appDirectory != null) {
val file = File(appDirectory, fileName)
try {
if (!file.exists()) {
val fileCreated = file.createNewFile()
if (!fileCreated) {
// Failed to create the file
return null
}
}
return file
} catch (e: IOException) {
e.printStackTrace()
}
}
return null
}
2条答案
按热度按时间um6iljoc1#
从API级别29开始,为了提高用户隐私和安全性,访问外部存储已经受到限制,因此如果您的应用程序使用API级别32,那么我猜您已经在清单中添加了存储权限,并且在运行时请求它们。
我在我的应用程序中有代码片段,可以执行您想要的相同功能。
Intent与操作ACTION_CREATE_DOCUMENT一起创建新文档。指定类别CATEGORY_OPENABLE以允许用户选择位置。类型指定文件的MIME类型。在这个例子中,我们使用“video/mp4”。putExtra方法用于指定默认文件名。
结果是RESULT_OK。如果是,我们检索所选位置的Uri并将其传递给saveVideoToUri函数。
nhn9ugyo2#
1.清单中需要这两个权限,并以编程方式向用户请求权限
1.在Android R+中,您无法访问没有
MANAGE_EXTERNAL_STORAGE
see documentation here的存储,但您可以访问共享存储,如Downloads
和您的应用文件夹。1.现在你可以用下面的代码创建你的文件夹目录
1.现在创建您的视频文件在您的目录使用下面的代码
这对我来说很有效,我只是希望你的问题能解决。