0

Я использую только приложение GoogleApiClient для Android. Я не могу получить свое использование квоты GoogleDrive (всего/доступно/и т. Д.). Как Googling ..., может быть DriveService (com.google.api.services.drive.Drive) возможно ... но я не использую это ......Как получить GoogleDrive Quota (оставшийся доступный размер) с помощью GoogleApiClient?

Как получить информацию о квотах GoogleDrive ?

(Примечание) Вот мой строитель GoogleApiClient.

GDApi = new GoogleApiClient.Builder(mContext) 
       .addApi(Plus.API) 
       .addScope(Plus.SCOPE_PLUS_PROFILE) 
       .addApi(Drive.API) 
       .addScope(Drive.SCOPE_FILE) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .setAccountName(token) 
       .build(); 
+0

Я нашел этот пример кода в [документации] (https://developers.google.com/drive/v2/reference/about/get#examples), который использует 'about.getQuotaBytesUsed() 'и' about.getQuotaBytesTotal() '. Я думаю, что это то, что вы ищете. Кроме того, вы всегда можете посмотреть размер квоты/оставшегося размера в консоли разработчика вручную. – gerardnimo

ответ

0

К сожалению (AFAIK), не существует эквивалента getQuotaBytesTotal(), getQuotaBytesUsed() в GDAA.

Итак, единственный способ получить эту информацию (и другие функции нет - например, thumbnails, ...) - добавить REST Api. Тем не менее, убедитесь, что вы тщательно используете этот микс, вы можете столкнуться с множеством проблем с задержкой/временем.

Есть несколько предпосылок для достижения этого:

1/убедитесь, что вы включили следующие банки в вашем проекте:

compile 'com.google.apis:google-api-services-drive:v2-rev105-1.17.0-rc' 
compile 'com.google.http-client:google-http-client-gson:1.20.0' 
compile 'com.google.api-client:google-api-client-android:1.20.0' 
... 
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.json.gson.GsonFactory; 

2/вам потребуется дополнительное разрешение в манифесте :

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

3/Вы должны получить com.google.api.services.drive.Drive службу и запросить его после onConnected() обратного вызова GDAA, как и так:

private static GoogleApiClient mGAC; 
private static com.google.api.services.drive.Drive mGooSvc; 

static boolean init(Activity context) { 
    if (context != null) try { 

    mGooSvc = new com.google.api.services.drive.Drive.Builder(
     AndroidHttp.newCompatibleTransport(), 
     new GsonFactory(), 
     GoogleAccountCredential.usingOAuth2(
     context.getApplicationContext(), 
     Collections.singletonList(com.google.api.services.drive.DriveScopes.DRIVE_FILE) 
    ) 
    ).build(); 

    mGAC = new GoogleApiClient.Builder(context) 
     .addApi(Drive.API) 
     // ... additional APIs 
     .addScope(Drive.SCOPE_FILE) 
     .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { 
     @Override 
     public void onConnectionSuspended(int i) { 
     } 

     @Override 
     public void onConnected(Bundle bundle) { 
      new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
       com.google.api.services.drive.model.About about = mGooSvc.about().get().execute(); 
       System.out.println("Total quota (bytes): " + about.getQuotaBytesTotal()); 
       System.out.println("Used quota (bytes): " + about.getQuotaBytesUsed()); 
       } catch (Exception e) { e.printStackTrace(); } 
       //} catch (UserRecoverableAuthIOException uraIOEx) { 
       // // standard authorization failure - user fixable 
       //} catch (GoogleAuthIOException gaIOEx) { 
       // // usually PackageName /SHA1 mismatch in DevConsole 
       //} catch (IOException e) { 
       // if (e instanceof GoogleJsonResponseException) { 
       // if (404 == ((GoogleJsonResponseException) e).getStatusCode()) { 
       //  // '404 not found' in FILE scope, consider connected 
       // } 
       // } 
       //} catch (Exception e) { 
       // // "the name must not be empty" indicate 
       // // UNREGISTERED/EMPTY account in 'setSelectedAccountName()' above 
       //} 
      } 
      }).start(); 
     } 
     }) 
     .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { 
     @Override 
     public void onConnectionFailed(@NonNull ConnectionResult rslt) { 
      // perform standard authorization dance 
     } 
     }) 
     .build(); 

    mGAC.connect(); 

    return true; 
    } catch (Exception e) {e.printStackTrace();} 
    return false; 
} 

Обратите внимание, что я закомментирована обработку для execute() метода Реста ошибки/авторизации. Это связано с тем, что connect()/onConnected()/onConnectionFailed() GDAA обрабатывает авторизацию уже (если области идентичны).

Good Luck

+0

Спасибо, что применили, я тестирую его, но я получаю ошибку, «не могу разрешить метод about.getQuotaBytesTotal()». поэтому я ищу другие методы .... –

+0

Он работает на моей системе, посмотрите на JAR и импорт. – seanpj

+0

Да, я разместил JAR в моем проекте build.gradle, но не работает в моем случае. сообщение об ошибке (return json) является «сообщением»: «Недопустимый выбор поля quotaBytesTotal» и «reason»: «invalidParameter». потому что я назвал метод this «com.google.api.services.drive.model.About about = mGDSvc.about(). get(). setFields (« quotaBytesTotal »). execute();», но эта строка является проблемой ... я не знаю, почему ... –