Я играл с Google Drive API для Android и наткнулся на небольшую проблему. В частности, меня интересует папка приложений для сохранения и синхронизации данных приложений на разных устройствах. Я могу запросить, существует ли файл с определенным именем в папке приложения. Я могу получить файл через
driveFile = metadata.getDriveId().asDriveFile();
Я могу открыть файл через
driveFile.open( mGoogleApiClient,
DriveFile.MODE_WRITE_ONLY,
new DownloadProgressListener() {...} )
.setResultCallback(...);
И в более позднем обратном вызове я могу получить OutputStream с помощью:
OutputStream outputStream = dcr.getDriveContents().getOutputStream();
Но проблема в том, что если я попытаюсь записать в этот OutpustStream, в файл ничего не запишется. Я использовал такой код:
OutputStream outputStream = result.getDriveContents().getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream);
try {
writer.write("Just some strinh I want to save to Google Drive.");
} catch (IOException e) {
throw new RuntimeException(e);
}
Status status = dcr.getDriveContents().commit(mGoogleApiClient, null).await();
С помощью этого OutputStream ничего не записывается в GoogleDrive. Но если я использую код из https://developers.google.com/drive/android/files#making_modifications работает как положено.
Скопированный фрагмент этого кода из Google для справки:
try {
ParcelFileDescriptor parcelFileDescriptor = contents.getParcelFileDescriptor();
FileOutputStream fileOutputStream = new FileOutputStream(parcelFileDescriptor
.getFileDescriptor());
Writer writer = new OutputStreamWriter(fileOutputStream);
writer.write("hello world");
} catch (IOException e) {
e.printStackTrace();
}
Почему OutputStream, доступный через DriveContents.getOutputStream(), не работает должным образом? Почему это вообще предусмотрено? Или я что-то упускаю? Версия библиотеки сервисов Google Play — r29.