Я не знаком ни с kotlin
, ни с методом, который вы используете.Я говорю вам путь, упомянутый точно в документах и с которым я знаком.
//Starts the sign-in process and initializes the Drive client.
public void signIn() {
GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(Drive.SCOPE_FILE)
.requestScopes(Drive.SCOPE_APPFOLDER)
.build();
GoogleSignInClient googleSignInClient = GoogleSignIn.getClient(this, signInOptions);
startActivityForResult(googleSignInClient.getSignInIntent(), REQUEST_CODE_SIGN_IN);
}
/**
* Handles resolution callbacks.
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SIGN_IN) {
if (resultCode == RESULT_OK) {
initializeDriveClient(GoogleSignIn.getLastSignedInAccount(this));
} else if (resultCode == RESULT_CANCELED) {
Snackbar.make(findViewById(R.id.fab), R.string.sign_in_alert, Snackbar.LENGTH_SHORT).show();
}else{
Snackbar.make(findViewById(R.id.fab), R.string.sign_fail, Snackbar.LENGTH_SHORT).show();
}
}
}
/**
* Continues the sign-in process, initializing the DriveResourceClient with the current
* user's account.
*/
private void initializeDriveClient(GoogleSignInAccount signInAccount) {
mDriveResourceClient = Drive.getDriveResourceClient(getApplicationContext(), signInAccount);
mDriveResourceClient.getAppFolder().addOnSuccessListener(new OnSuccessListener<DriveFolder>() {
@Override
public void onSuccess(DriveFolder driveFolder) {
onDriveClientReady();
// CONTINUE THE TASK
}
});
}
abstract void onDriveClientReady();
Теперь поместите это в класс активности abstract
, затем расширьте его с MainКласс активности .
Этот код исключительный-безопасный , если пользователь отменит вход, вы сможете прекратить достигать следующей строки кода с onActivityResult
. Пользователю будут отображаться параметры входа, чтобы выбрать одну учетную запись для входа.Если он приходит RESULT_OK
в onActivityResult
, это означает, что он выполнил вход.
Следующая строка кода попытается инициализировать DriveClient
асинхронно (здесь я хотел только appfolder
, поэтомупопробовал getAppFolder
и Drive.SCOPE_APPFOLDER
, вы настроите его так, как вам нужно.).После успешной инициализации клиента накопителя вы получите DriveFolder
из метода onSuccess
.
Зависимости
implementation('com.google.api-client:google-api-client-android:1.23.0') {
exclude group: 'org.apache.httpcomponents'
}
implementation('com.google.apis:google-api-services-drive:v3-rev114-1.23.0') {
exclude group: 'org.apache.httpcomponents'
}
implementation 'com.google.android.gms:play-services-auth:15.0.1'
implementation 'com.google.android.gms:play-services-drive:15.0.1'
Дополнительная справкаи документы
Примечание Я всегда сохраняю резервные копии своих кодов приложений.Если вы хотите увидеть весь класс, который я использую, посмотрите это: