我按照Google的快速入门示例设置了GMail API:https://developers.google.com/gmail/api/quickstart/android。我的应用程序成功请求了GET_ACCOUNTS权限,并允许用户选择他/她的gmail帐户。所选帐户保存在SharedPreferences中,以供以后访问。
通过IntentService,我的应用程序发送电子邮件。我按照这里的说明进行操作:https://developers.google.com/gmail/api/guides/sending,并根据需要包括了activation.jar、additional.jar和mail.jar库。当我使用下面的代码发送电子邮件时,我会遇到一个
当我捕获异常、获取存储在异常中的Intent并将其作为新活动启动时,会显示一个对话框,让我有机会允许我的应用使用GMail帐户发送电子邮件:
。在此对话框上按“允许”后,我的应用程序可以无需进一步操作即可发送电子邮件。我的应用程序也出现在我的Google帐户权限页面上,表示它已被授权发送电子邮件。
是否有办法在我首次获取用户帐户名时手动触发此对话框,而不是等待异常发生?
更新:
如果有需要,我已经能够提取存储在Intent中的操作和数据:
- 操作:com.google.android.gms.ui.UNPACKING_REDIRECT - 数据:intent://com.google.android.gms.auth.uiflows.common/KEY
其中,KEY是一系列字符,可能与我的帐户相关或者是一个令牌。 编辑: 以下是我正在使用的代码来创建Credentials对象和启动帐户选择器活动:
通过IntentService,我的应用程序发送电子邮件。我按照这里的说明进行操作:https://developers.google.com/gmail/api/guides/sending,并根据需要包括了activation.jar、additional.jar和mail.jar库。当我使用下面的代码发送电子邮件时,我会遇到一个
UserRecoverableAuthUIException
错误。message = service.users().messages().send(userId, message).execute();
当我捕获异常、获取存储在异常中的Intent并将其作为新活动启动时,会显示一个对话框,让我有机会允许我的应用使用GMail帐户发送电子邮件:
![UserRecoverableAuthIOException Intent Activity](https://istack.dev59.com/RKuHF.webp)
- 操作:com.google.android.gms.ui.UNPACKING_REDIRECT - 数据:intent://com.google.android.gms.auth.uiflows.common/KEY
其中,KEY是一系列字符,可能与我的帐户相关或者是一个令牌。 编辑: 以下是我正在使用的代码来创建Credentials对象和启动帐户选择器活动:
private GoogleAccountCredential mCredential;
private static final String[] SCOPES = { GmailScopes.GMAIL_COMPOSE };
构造函数内部:
mCredential = GoogleAccountCredential.usingOAuth2(
getApplicationContext(), Arrays.asList(SCOPES))
.setBackOff(new ExponentialBackOff());
我从哪里获取账户:
private void chooseGMailAccount() {
String accountName = this.getSharedPreferences(getString(R.string.shared_pref_main),
Context.MODE_PRIVATE)
.getString(getString(R.string.srd_pref_gmail_account), null);
if (accountName != null) {
mCredential.setSelectedAccountName(accountName);
configureGMailAPI();
} else {
startActivityForResult(
mCredential.newChooseAccountIntent(),
REQUEST_ACCOUNT_PICKER);
}
}