Первоначально предполагалось во второй части дать обзор примера от Google, но потом стало понятно, что разбирать там особо нечего, да и это скучно довольно. Поэтому здесь будет приведен обзор основных моментов и подводных камней.
Итак первое с чем придется столкнуться во время работы с Drive API - это получение объекта Drive. Делается это так:
Итак первое с чем придется столкнуться во время работы с Drive API - это получение объекта Drive. Делается это так:
Drive drive = new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential) .build();credentials можно получить так -
credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);После этого у вас на руках рабочий объект Drive. За исключением того, что вы еще не авторизованы пользователем для работы с его диском. Это разрешение получают примерно так:
try{ drive.files().touch(fileId).execute(); }catch(UserRecoverableAuthIOException e){ startActivityForResult(e.getIntent,REQUEST_AUTHORIZATION) }Затем в методе onActivityResult можно будет отловить ваш REQUEST_AUTHORIZATION. Теперь авторизация получена.
Стоит добавить, что работу с Drive API следует проводить не в UI Thread, так как в противном случае будет брошен Exception. В конце небольшой класс для работы с драйвом.
import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import android.content.Context; import com.google.api.client.extensions.android.http.AndroidHttp; import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential; import com.google.api.client.http.FileContent; import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpResponse; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.drive.Drive; import com.google.api.services.drive.DriveScopes; import com.google.api.services.drive.model.File; import com.google.api.services.drive.model.FileList; import com.google.api.services.drive.model.ParentList; import com.google.api.services.drive.model.ParentReference; public class DriveService { static final String folderMIME = "application/vnd.google-apps.folder"; public static final int REQUEST_AUTHORIZATION = 1990; private GoogleAccountCredential credential; private Drive driveService; public DriveService(Context context, String accountName) { credential = GoogleAccountCredential.usingOAuth2(context, DriveScopes.DRIVE); credential.setSelectedAccountName(accountName); driveService = getDriveService(credential); } private Drive getDriveService(GoogleAccountCredential credential) { return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential).build(); } public File getFile(String id) throws IOException{ return driveService.files().get(id).execute(); } public ParentList getParents(String id) throws IOException{ return driveService.parents().list(id).execute(); } public ListgetFileList(String q) throws IOException { List result = new ArrayList (); com.google.api.services.drive.Drive.Files.List listRequest = driveService .files().list(); if( q!= null && q.length() > 0) listRequest.setQ(q); do { FileList fList = listRequest.execute(); result.addAll(fList.getItems()); listRequest.setPageToken(fList.getNextPageToken()); } while (listRequest.getPageToken() != null && listRequest.getPageToken().length() > 0); return result; } public void deleteFile(String fileId) throws IOException { driveService.files().delete(fileId).execute(); } public InputStream downloadFile(File file) throws IOException { HttpResponse resp = driveService.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl())) .execute(); return resp.getContent(); } public File uploadFile(String title, String desc, String parentId, String mime, String fName) throws IOException { File body = new File(); body.setTitle(title); body.setDescription(desc); body.setMimeType(mime); if (parentId != null && parentId.length() > 0) { ParentReference parent = new ParentReference(); parent.setId(parentId); body.setParents(Arrays.asList(parent)); } java.io.File content = new java.io.File(fName); FileContent fContent = new FileContent(mime, content); return driveService.files().insert(body, fContent).execute(); } public File createFolder(String parentId, String folderName) throws IOException { File body = new File(); body.setTitle(folderName); body.setMimeType(folderMIME); if (parentId != null && parentId.length() > 0) { ParentReference parent = new ParentReference(); parent.setId(parentId); body.setParents(Arrays.asList(parent)); } return driveService.files().insert(body).execute(); } public File updateFile(String fileId, String newTitle, String newDesc, String newMime, String newFileName) throws IOException { File oldFile = driveService.files().get(fileId).execute(); oldFile.setTitle(newTitle); oldFile.setDescription(newDesc); oldFile.setMimeType(newMime); java.io.File newFile = new java.io.File(newFileName); FileContent newContent = new FileContent(newMime, newFile); return driveService.files().update(fileId, oldFile, newContent).execute(); } }
No comments:
Post a Comment
Post your comment here