Search code examples
androidgoogle-drive-apigoogle-drive-android-apiseekrandomaccessfile

Is it possible to have random access writes to a Google Drive file from the Android API?


I'm trying to record audio and create a wav file in Google Drive with the Android API. I have a first pass where I write the header with a file length of 0 bytes because I don't know how long the recorded audio will be and I don't want to keep it all in memory. Once the record is finished I seek back to byte 4 and write the length of the file.

This works great when using a RandomAccessFile but I can't figure out how to do something using the Google Drive API. https://developers.google.com/drive/android/files

The DriveContents class (https://developers.google.com/android/reference/com/google/android/gms/drive/DriveContents) doesn't hint at any way to seek within the contents. Any ideas?


Solution

  • I don't think it will be possible this way. Google drive Apis (V2, V3, GDAA) all accept file streams (i.e. serial streams) as contents. You are probably aware that you construct metadata + contents and upload (create, patch, update).

    Since you need to modify your file's header after you're finished writing to the file, the only way to do it is to finish everything in a local file and then hand it's stream to the GooDrive Api. The update/patch will not help you in this case since your header is a part of a chunk of bytes known to GooDrive Apis as contents.

    It is logical, V2 and V3 are straight REST apis, so they send the bytes up in a serial fashion. There is some hope GDAA may do it one day (see 'Lifecycle of a Drive file'), but I wouldn't hold my breath.