Как загрузить несколько аудиофайлов на Google Диск в указанную папку на диске?

#android #audio #google-drive-android-api

#Android #Аудио #google-drive-android-api

Вопрос:

Я работаю над проектом, который должен загружать несколько аудиофайлов (.amr) на Google Диск в определенную папку. Теперь я использую метод «startIntentSender», чтобы показать средство выбора для выбора папки на диске. Для одного файла он работает нормально, но мне нужно отправлять несколько файлов одновременно без какого-либо средства выбора, и я должен отправить их в определенную папку, которую мне нужно указать в программе. Я много искал, но я запутался. Теперь API Google Drive устарел. Есть ли какой-либо способ для многократной загрузки?

 Drive.DriveApi.newDriveContents(mGoogleApiClient)
                .setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() {

                    @Override
                    public void onResult(DriveApi.DriveContentsResult result) {

                        if (!result.getStatus().isSuccess()) {
                            Log.i(TAG, "Failed to create new contents.");
                            return;
                        }
                        OutputStream   outputStream = result.getDriveContents().getOutputStream();


                            try {
                                FileInputStream fileInputStream = new FileInputStream(mAllCallRecordFiles.get(i).getFilePath());
                                byte[] buffer = new byte[1024];
                                int bytesRead;
                                while ((bytesRead = fileInputStream.read(buffer)) != -1) {
                                    outputStream.write(buffer, 0, bytesRead);
                                }
                            } catch (IOException e1) {
                                Log.i(TAG, "U AR A MORON! Unable to write file contents.");
                            }




                        MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder()
                                .setMimeType("audio/*")
                                .build();

                        IntentSender intentSender = Drive.DriveApi
                                .newCreateFileActivityBuilder()
                                .setInitialMetadata(metadataChangeSet)
                                .setInitialDriveContents(result.getDriveContents())
                                .build(mGoogleApiClient);
                        try {
                            startIntentSender(intentSender, null, 0, 0, 0);
                        } catch (IntentSender.SendIntentException e) {
                            Log.i(TAG, "Failed to launch file chooser.");
                        }
                    }
                })
  

Ответ №1:

Я предлагаю вам использовать для этого остальную часть API Google Диска: https://developers.google.com/drive/api/v2/about-sdk

Похоже, что нет способа отправить более одного файла в одном запросе, но вы можете просто создать цикл и отправить несколько запросов, каждый из которых содержит один файл, тогда вы все равно будете загружать их одновременно. Это может помочь вам в этом: https://developers.google.com/drive/api/v2/manage-uploads

Таким образом, вы можете выбрать нужную папку, указав правильный идентификатор в родительском свойстве файла, как указано в документации api:

 String folderId = "0BwwA4oUTeiV1TGRPeTVjaWRDY1E";
File fileMetadata = new File();
fileMetadata.setTitle("photo.jpg");
fileMetadata.setParents(Collections.singletonList(
    new ParentReference().setId(folderId)));
java.io.File filePath = new java.io.File("files/photo.jpg");
FileContent mediaContent = new FileContent("image/jpeg", filePath);
File file = driveService.files().insert(fileMetadata, mediaContent)
    .setFields("id, parents")
    .execute();
System.out.println("File ID: "   file.getId());
  

Это полная документация о том, как управлять папками https://developers.google.com/drive/api/v2/folder

Надеюсь, это вам поможет.

Комментарии:

1. У вас есть полный код. Не могли бы вы уточнить это. Здесь driveService означает?