【发布时间】:2019-05-19 06:09:54
【问题描述】:
只是我的代码的快速 sn-p:
初始化:
mCredential = GoogleAccountCredential.usingOAuth2(
getApplicationContext(), SCOPES)
.setBackOff(new ExponentialBackOff());
然后我启动选择器:
startActivityForResult(mCredential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
然后在ActivityForResult中
if (resultCode == RESULT_OK && data != null && data.getExtras() != null) {
String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
if (accountName != null) {
PersistentUtil.persistGmailName(this, accountName);
mCredential.setSelectedAccountName(accountName);
checkDataAccess();
}
}
在哪里检查数据访问:
java.lang.Thread thread = new java.lang.Thread(new Runnable() {
@Override
public void run() {
HttpTransport transport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
Gmail mService = new com.google.api.services.gmail.Gmail.Builder(
transport, jsonFactory, mCredential)
.setApplicationName(getResources().getString(R.string.app_name))
.build();
try {
Gmail.Users users = mService.users();
Gmail.Users.Messages messages = users.messages();
Gmail.Users.Messages.List me = messages.list("me");
ListMessagesResponse temp = me.execute();
// if no error is thrown then, we are good to go
onGmailFinished();
// parseMessageList(mService, temp);
} catch (UserRecoverableAuthIOException e) {
startActivityForResult(
((UserRecoverableAuthIOException) e).getIntent(),
REQUEST_AUTHORIZATION);
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
问题
ListMessagesResponse temp = me.execute(); 最终将调用getAccounts() 方法,该方法在设备上配置的帐户中搜索用户。如果未授予 GET_ACCOUNTS 权限,它将返回 null。
我怎样才能做到不依赖 GET_ACCOUNTS 权限,一种独立于设备帐户配置 gmail 帐户的方法?我不想请求 GET_ACCOUNTS 权限。
有没有办法做到这一点,还是我总是必须通过 intentChooser 并在之后依赖 GET_ACCOUNTS 权限? :(
【问题讨论】: