调用AccountManager.getAuthToken()。getResult()会导致执行跳转到函数的末尾

时间:2017-05-19 15:24:37

标签: android

我的应用使用AccountManager.getAuthToken().getResult()获取Google语音的authToken(我知道它是同步和阻止的。我没有写那部分)。通常情况下,Google Play服务会在第一次通知用户需要授权应用访问其帐户时显示通知,之后会缓存该令牌。

用户报告说他从未收到通知,因此,调用getResult()会导致应用程序崩溃。在做了一些调试,挖掘日志并编写测试应用程序之后,我们缩小了原因,因为用户已经阻止来自Play服务的通知,因为他不想收到有关OTA的通知。显然,由于Play服务无法显示通知,因此该应用无法获得授权,因此,当它调用getResult()时,它会崩溃。

奇怪的是,它没有抛出异常。在这种情况下,getResult()会返回一个可以调用以显示授权弹出窗口的意图,就像notifyAuthFailure设置为false一样,即使您已将其设置为true }。此外,它会跳到函数中的最后一个return,忽略任何其他代码。

这是一些测试代码:

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并让调用者检查返回的内容,但为什么会跳到最后?

0 个答案:

没有答案