Android 以指定帐户的 Intent 打开谷歌驱动器

标签 android android-intent kotlin google-drive-android-api

我在我的 Google 云端硬盘中设置了多个帐户

account1@gmail.com account2@gmail.com

我想通过 intent 使用 account2@gmail.com 打开 google drive。 我可以使用以下功能打开 Google 云端硬盘应用。

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"),但没有成功。

是否可以在 intent extras 中发送/指定帐户?将不胜感激。

最佳答案

我既不熟悉 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();

现在,将其放入抽象 Activity 类中,然后从Main Activity 类 扩展它。

此代码是异常安全,如果用户取消登录,您将能够终止从onActivityResult到达下一行代码。用户将显示登录选项,以选择一个帐户进行登录。如果 onActivityResult 出现 RESULT_OK,则表示他已登录。

下一行代码将尝试异步初始化 DriveClient(这里我只想要 appfolder,所以尝试了 getAppFolderDrive.SCOPE_APPFOLDER,您将根据需要进行设置。)。成功初始化驱动器客户端后,您将从 onSuccess 方法获取 DriveFolder

依赖关系

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'

更多帮助和文档

注意 我总是备份我的应用程序代码。如果您想查看我正在使用的整个类(class),请查看:

关于Android 以指定帐户的 Intent 打开谷歌驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50482038/

相关文章:

kotlin - 在 Kotlin 中将 List 转换为 Pair 的惯用方法

java - 我可以使用 Jar 签名来保护 Android APK 文件免遭反编译吗?

android - 模拟 Nexus 7

Android -- Camera Intent 立即返回

android - 对返回 when 语句感到困惑

kotlin - 在添加 “run”之前,将忽略Lambda。

android - 如何在 Android 中强制通过 Wi-Fi 而不是蜂窝网络进行 HTTP 连接?

java - 您如何验证在 Android 2.1 中输入的 EditTextPreference 的格式和值?

android - 通知服务在通知点击上增加了额外的费用,怎么样?

java - Intent startActivity(i) 上的 Intent 标志;