2015-01-01 5 views
2

У меня есть приложение для Android, которое позволяет пользователям экспортировать CSV-файл на Google Диск, чтобы они могли его редактировать, а затем повторно импортировать файл в Android.Загрузка CSV-файла в виде Листа Google с помощью Android SDK

Это использовалось для работы с старыми документами Google Docs. Я обновил этот старый API до ранней версии Google Диска в прошлом году и смог заставить его работать достаточно хорошо. Теперь, когда я обновился до последней версии, эта функция моего приложения эффективно нарушена. Я думаю, что это комбинация разрешений SDK и выключение Google Таблиц с Google Диска.

Что происходит, я загрузить файл с мета данных:

MetadataChangeSet changeSet = new MetadataChangeSet.Builder() 
                 .setTitle(fileName) 
                 .setMimeType("text/csv") 
                 .setStarred(true) 
                 .build(); 

Загруженный файл, то есть синий значок Google Docs. Когда пользователь получает доступ к Google Диску для его редактирования, он может только «просматривать» документ. Пока они просматривают его, они могут «открыть» документ с помощью Google Таблиц, который затем создает новый документ (этот новый документ имеет значок «Зеленые Google Таблицы»), и поскольку в SDK Google есть эта новая «функция» (цитата из: https://developers.google.com/drive/android/queries):

Примечание: API Android Drive работает только с областью https://www.googleapis.com/auth/drive.file. Это означает, что только файлы, которые пользователь открыл или создал с вашим приложением, могут быть , соответствующие запросу.

Новый файл не может быть просмотрен моим, поэтому изменения пользователя не могут быть восстановлены.

Есть ли способ загрузить его непосредственно в виде файла Google Таблиц? Или, может быть, еще одно решение, которое я пропустил полностью?

редактирует

Вот пример того, как я отправляю мой код с помощью Google Drive SDK:

В конструкторе моего AsyncTask Я создаю Google клиент:

mGoogleApiClient = new GoogleApiClient.Builder(activity) 
          .addApi(Drive.API) 
          .addScope(Drive.SCOPE_FILE) 
          .addConnectionCallbacks(this) 
          .addOnConnectionFailedListener(this) 
          .build(); 
mGoogleApiClient.connect(); 

Тогда в методе doInBackground я делаю что-то вроде этого:

DriveApi.DriveContentsResult cResult = Drive.DriveApi.newDriveContents(mGoogleApiClient).await(); 

OutputStream os = cResult.getDriveContents().getOutputStream(); 
InputStream is = new FileInputStream(f); 

//write the input stream to the output stream 
.... 

DriveFileResult exportResult = Drive.DriveApi.getRootFolder(mGoogleApiClient) 
                  .createFile(mGoogleApiClient, changeSet, cResult.getDriveContents()) 
                  .await(); 

Это довольно просто (как только вы понять это) там просто не кажется, чтобы быть подальше, чтобы сообщить SDK, что я хочу этот документ, чтобы быть «Google Sheet» вместо «Google Doc»

Благодаря!

-Aaron

+0

Мое дело в том, что import = false (что является значением по умолчанию). Установить import = true – pinoyyid

+0

Используется ли это с помощью веб-api для Google Drive? Я не вижу нигде в Android SDK (developers.google.com/drive/android), который позволяет вам установить свойство с именем import. Я обновил вопрос, чтобы включить код в Android SDK. – Aaron

+1

Как упоминает @Rivero ниже, для этого вам нужно использовать параметр convert, который в настоящее время не поддерживается в API Android. Не могли бы вы подать запрос функции на трекер проблемы API, в котором излагаются ваши варианты использования? https://code.google.com/a/google.com/p/apps-api-issues/ Тем временем я предлагаю продолжать использовать клиент Java API. – Daniel

ответ

1

Вы должны преобразовать оригинальный явно в электронную таблицу, в противном случае он будет в конечном итоге как прямой загрузки на Ваш счет привода. Попробуйте использовать следующий код:

java.io.File fileContent = new java.io.File(csvfilepath); 
FileContent mediaContent = new FileContent("text/csv", fileContent); 

// File's metadata. 
File body = new File(); 
body.setTitle(fileContent.getName()); 
body.setMimeType("text/csv"); 

Insert request = service.files().insert(body, mediaContent); 
request.setConvert(true); 
File file = request.execute(); 
+1

Я думаю, что для google-api-client api не так ли? Google просит разработчиков Android использовать новый Drive SDK (https://developers.google.com/drive/android/) для доступа к Google Drive с угрозами отсрочки и отказа. – Aaron