我刚开始帮助一个已建立的android项目,并且对如何将系统转换为做我想做的事情感到不知所措。请记住,我对android还是很新的,所以如果这个问题的一部分没有意义,我会道歉,或者我说错了。在Uri旁边创建新文件
该项目使用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());
}
的路径名我从乌里得到这个样子:/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。
谢谢你提供的任何帮助。
非常感谢您的帮助。我能够使用'Uri newkid = DocumentsContract.createDocument(contentResolver,childrenUri,“video/mp4”,oldname +“trim.mp4”);'在老版本的旁边创建一个新的孩子。 – DweebsUnited