【发布时间】:2017-10-26 16:49:09
【问题描述】:
我刚开始帮助一个已建立的 android 项目,不知道如何让系统做我想做的事。请记住,我对 android 还是很陌生,所以如果这个问题的一部分没有意义,或者我说错了,我们深表歉意。
该项目使用ContentResolver 遍历usb OTG 记忆棒或内部存储的DCIM 文件夹。我得到的是找到的每个视频文件的 Uri。我需要打开并获取该文件的原始文件描述符编号,然后在其旁边创建一个新文件以进行写入(名称类似于 originalvideo.mp4.trim.mp4,不必漂亮),并获得一个原始文件描述符编号。
项目对这些文件进行 ffmpeg 调用,为了避免 OTG 棒的权限错误(因为 Google 将 OTG 权限更新为非常严格),我们只能使用从 Java 获得的文件描述符。这是一种非常痛苦的颈部疼痛,但经过数周的探索,这是我们发现使这项工作发挥作用的唯一方法,所以我们坚持下去。
这是当前在遍历循环中发生的事情:
final Uri documentUri = DocumentsContract.buildDocumentUriUsingTree(rootUri, docId);
ParcelFileDescriptor fd = getContentResolver().openFileDescriptor(documentUri, "r");
if (fd != null) {
int ret = NativeLib.testFd( fd.getFd( ) );
}
我从 Uri 获得的路径名如下所示:/tree/primary:DCIM/document/primary:DCIM/V0480060.MP4,而我不知道如何在该文件旁边创建和打开一个新文件,如下所示:/tree/primary:DCIM/document/primary:DCIM/V0480060.MP4.trim.mp4。我尝试将 Uri 转换为文件,我尝试在创建文件之前编辑路径,但都抛出 IOExceptions,说No such file or directory。不,我正在尝试创建它。
这是我最接近它的工作:
File f = new File( documentUri.getPath() + ".trim.mp4" );
if( !f.exists() )
f.createNewFile();
ParcelFileDescriptor fn = ParcelFileDescriptor.open( f, ParcelFileDescriptor.MODE_WRITE_ONLY );
但即使这样也会引发 IOExcept。
感谢您提供的任何帮助。
【问题讨论】:
标签: java android file android-file