如何在Android中使用Intent.ACTION_VIEW时保留Google Drive身份验证?

时间:2016-07-30 15:43:45

标签: android google-drive-api

我在我的应用中使用Google Drive REST api v3。当应用程序启动时,用户将登录他/她的Google帐户并获得身份验证。 当用户启动此意图时

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(googleDriveFileUrl));

然后让用户从启动器中选择Google Drive应用,现在登录对话框弹出并要求再次登录。 是否可以让用户使用相同的帐户,以便新活动不会再次请求登录?

1 个答案:

答案 0 :(得分:1)

validate帐户authentication有两种方式:

  • 设备上没有注册帐户电子邮件

GoogleApiClient GAC = new GoogleApiClient.Builder(context) //.setAccountName(email) .addApi(Drive.API) .addScope(Drive.SCOPE_FILE) .addConnectionCallbacks(...) .addOnConnectionFailedListener(...) .build();

Google Play服务会弹出account picker对话框,供您选择有效帐户或创建新帐户。

  • 在设备上指定有效帐户的电子邮件

GoogleApiClient GAC = new GoogleApiClient.Builder(context) .setAccountName(email) .addApi(Drive.API) .addScope(Drive.SCOPE_FILE) .addConnectionCallbacks(...) .addOnConnectionFailedListener(...) .build();

您必须通过帐户选择器使用其中一个已注册的设备:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
...
static final int REQ_ACCPICK = 999;
...
startActivityForResult(AccountPicker.newChooseAccountIntent(null, null,
new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE}, true, null, null, null, null), REQ_ACCPICK);
...
@Override
protected void onActivityResult(int request, int rslt, Intent data) {
if (
request == REQ_ACCPICK &&
rslt == RESULT_OK && 
data != null && data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME) != null
)
email = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);

这是一个示例演示应用,其中讨论require sccount pickhttps://github.com/seanpjanson/GDAADemo/blob/master/app/src/main/java/com/spjanson/gdaademo/MainActivity.java