В Accessing Google APIs говоритсяМожет ли Google Drive Android Drive.API Android сочетаться с другими API?
Вы можете добавить несколько API, и несколько областей к тому же GoogleApiClient путем добавления дополнительных вызовов к addApi() и addScope().
Вдоль этой линии я пытался что-то вроде этого:
private GoogleApiClient buildGoogleApiClient() {
return new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_APPFOLDER) // Required for AppFolder access
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Auth.GOOGLE_SIGN_IN_API) // I added this because I need Auth.GoogleSignInApi.signOut(client) method
.build();
}
public void onClickBtnDeleteFromDrive(View v) {
mGoogleApiClient = buildGoogleApiClient();
mGoogleApiClient.connect();
}
Как вы видите, я пытаюсь объединить два API, потому что мне нужен метод Auth.GoogleSignInApi.signOut (клиент). Зачем? Поскольку у GoogleApiClient нет метода для автоматического выхода из учетной записи пользователя по умолчанию. Да, я знаю, что есть clearDefaultAndRecconect(), но это требует уже подписания, а также принудительного повторного подключения. Оба они против моего рабочего процесса. выше buildGoogleApiClient() производит исключение:
02-14 08:49:07.760: E/AndroidRuntime(5436): FATAL EXCEPTION: main
02-14 08:49:07.760: E/AndroidRuntime(5436): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testgoogleapi/com.example.testgoogleapi.ActivityMain}: java.lang.IllegalStateException: Must not set scopes in GoogleApiClient.Builder when using Auth.GOOGLE_SIGN_IN_API. Set account in GoogleSignInOptions.Builder instead.
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.app.ActivityThread.access$700(ActivityThread.java:140)
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.os.Looper.loop(Looper.java:137)
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.app.ActivityThread.main(ActivityThread.java:4921)
02-14 08:49:07.760: E/AndroidRuntime(5436): at java.lang.reflect.Method.invokeNative(Native Method)
02-14 08:49:07.760: E/AndroidRuntime(5436): at java.lang.reflect.Method.invoke(Method.java:511)
02-14 08:49:07.760: E/AndroidRuntime(5436): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
02-14 08:49:07.760: E/AndroidRuntime(5436): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
02-14 08:49:07.760: E/AndroidRuntime(5436): at dalvik.system.NativeStart.main(Native Method)
02-14 08:49:07.760: E/AndroidRuntime(5436): Caused by: java.lang.IllegalStateException: Must not set scopes in GoogleApiClient.Builder when using Auth.GOOGLE_SIGN_IN_API. Set account in GoogleSignInOptions.Builder instead.
02-14 08:49:07.760: E/AndroidRuntime(5436): at com.google.android.gms.common.internal.zzx.zza(Unknown Source)
02-14 08:49:07.760: E/AndroidRuntime(5436): at com.google.android.gms.common.api.GoogleApiClient$Builder.zzoZ(Unknown Source)
02-14 08:49:07.760: E/AndroidRuntime(5436): at com.google.android.gms.common.api.GoogleApiClient$Builder.build(Unknown Source)
02-14 08:49:07.760: E/AndroidRuntime(5436): at com.example.testgoogleapi.ActivityMain.buildGoogleApiClient(ActivityMain.java:81)
02-14 08:49:07.760: E/AndroidRuntime(5436): at com.example.testgoogleapi.ActivityMain.onCreate(ActivityMain.java:458)
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.app.Activity.performCreate(Activity.java:5206)
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
02-14 08:49:07.760: E/AndroidRuntime(5436): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
02-14 08:49:07.760: E/AndroidRuntime(5436): ... 11 more
02-14 08:49:22.710: I/Process(5436): Sending signal. PID: 5436 SIG: 9
Так как объединить эти два API и использовать функциональные возможности от обоих?
Проблема с этим предложением в том, что она не сочетается с Google Drive API. И, как оказалось, GoogleSignInApi не предлагает какой-либо optioun для очистки учетной записи по умолчанию. Таким образом, он имеет ту же ошибку, что и Drive API. –
см. Ниже код для выхода из системы и отмены доступа –