我剛開始幫助一個已建立的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