Android открыть Google Drive с намерением с указанным аккаунтом - PullRequest
0 голосов
/ 23 мая 2018

У меня есть несколько учетных записей на моем диске Google

account1@gmail.com account2@gmail.com

, и я хочу открыть диск Google с account2@gmail.com через намерение.Я могу открыть приложение Google Drive с помощью следующей функции.

fun startOpenGoogleDriveApp() {
    try {
        val intent = activity.packageManager.getLaunchIntentForPackage("com.google.android.apps.docs")
        startActivity(intent)
    }catch (e:Exception){
        e.printStackTrace()
    }
}

Пробовал с помощью intent.putExtra(Intent.EXTRA_USER,"account2@gmail.com"), но не сработало.

Можно ли отправить / указать учетную записьв намерениях статисты?Помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 26 мая 2018

Я не знаком ни с 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'

Дополнительная справкаи документы

Примечание Я всегда сохраняю резервные копии своих кодов приложений.Если вы хотите увидеть весь класс, который я использую, посмотрите это:

...