Android 调用AccountManager.getAuthToken().getResult()会导致执行跳到函数末尾
我的应用程序使用Android 调用AccountManager.getAuthToken().getResult()会导致执行跳到函数末尾,android,Android,我的应用程序使用AccountManager.getAuthToken().getResult()为Google Voice获取authToken(我知道它是同步和阻塞的。我没有写这部分)。通常,Google Play Services会在第一时间显示通知,通知用户需要授权应用程序访问其帐户,然后缓存令牌 一个用户报告说他从未收到通知,结果调用getResult()使应用程序崩溃。在进行了一些调试、挖掘日志并编写了一个测试应用程序之后,我们缩小了原因,因为用户不想收到关于OTA的通知,所以阻止了
AccountManager.getAuthToken().getResult()
为Google Voice获取authToken(我知道它是同步和阻塞的。我没有写这部分)。通常,Google Play Services会在第一时间显示通知,通知用户需要授权应用程序访问其帐户,然后缓存令牌
一个用户报告说他从未收到通知,结果调用getResult()
使应用程序崩溃。在进行了一些调试、挖掘日志并编写了一个测试应用程序之后,我们缩小了原因,因为用户不想收到关于OTA的通知,所以阻止了来自Play Services的通知。显然,由于Play Services无法显示通知,应用程序无法获得授权,因此在调用getResult()
时崩溃
奇怪的是,它没有抛出异常。在这种情况下,getResult()
返回一个可以调用以显示授权弹出窗口的意图,就好像notifyAuthFailure
被设置为false
,即使您已将其设置为true
。此外,它跳过函数中的最后一个返回
,忽略任何其他代码
下面是一些测试代码:
private static Bundle getAccountBundle(Context context, String account) {
Bundle bundle = null;
AccountManager accountManager = AccountManager.get(context);
if (accountManager != null) {
AccountManagerFuture accountManagerFuture = null;
try {
accountManagerFuture = accountManager.getAuthToken(new Account(account, "com.google"), "grandcentral", null, true, null, null);
// This is where the issue starts
bundle = (Bundle) accountManagerFuture.getResult();
return bundle;
} catch (Exception e) {
e.printStackTrace();
}
}
Log.i(TAG, "getAccountBundle: test 1");
return null;
}
在这里,调用getResult()
后,bundle
将包含显示授权弹出窗口的意图,但随后它将跳过执行到最后一行,而不会引发异常
我总是可以返回bundle
,让调用者检查返回的内容,但为什么要跳到最后呢