0

ユーザーにGoogleカレンダーのアクセスを許可する必要があります。最初のGoogleIDは、使用すると正常に機能します。

blockingGetAuthToken

そしてそれはトークンを取得します、私は通常このトークンにログオンします。したがって、他のアカウントを使用しようとすると、nullトークンを取得しました。私はたくさん検索し、getAuthTokenそれを呼び出すアクティビティからのコンテキストを使用するので、使用することが好ましいことを発見しました。それから私はそれを使用するためにプロセス全体を変換しました

 private static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/calendar";

public static String authorize(AndroidtestActivity parent, Account account) {
    AccountManager accountManager = AccountManager.get(parent);
    Bundle options= new Bundle();

    Log.d("MyAPP", "Get Authorization");
    try {
        AccountManagerFuture<Bundle> acc=accountManager.getAuthToken ( account, AUTH_TOKEN_TYPE,  options, true, null, null);
        Bundle authTokenBundle = acc.getResult();
        String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();

        Log.d("MyAPP","Token= "+authToken);
        return authToken;


    } catch (Exception ex) {
        Logger.getLogger(GoogleAuthorize.class.getName()).log(Level.SEVERE,
                null, ex);
    }
    return null;
}

}

しかし、それでも有効なトークンを取得できるアカウントはなく、すべてnullのトークンを取得します

それから私はこの答えを見ましたhttps://stackoverflow.com/a/2021337/1280902 そして使用して続いたinvalidateAuthToken

private static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/calendar";

public static String authorize(AndroidtestActivity parent, Account account) {
    AccountManager accountManager = AccountManager.get(parent);
    Bundle options= new Bundle();

    Log.d("MyAPP", "Get Authorization");
    try {
        AccountManagerFuture<Bundle> acc=accountManager.getAuthToken ( account, AUTH_TOKEN_TYPE,  options, true, null, null);
        Bundle authTokenBundle = acc.getResult();
        String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();
        accountManager.invalidateAuthToken("com.google",authToken);
        acc=accountManager.getAuthToken ( account, AUTH_TOKEN_TYPE,  options, true, null, null);
        authTokenBundle = acc.getResult();
        authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();

        Log.d("MyAPP","Token= "+authToken);
        return authToken;


    } catch (Exception ex) {
        Logger.getLogger(GoogleAuthorize.class.getName()).log(Level.SEVERE,
                null, ex);
    }
    return null;
}

}

しかし、私が使用するすべてのアカウントで同じ問題が発生しました。blockingGetAuthToken

だから私は何かが欠けていますか?

4

1 に答える 1

2

使用すると正常に動作します

getAuthToken (Account account, String authTokenType, Bundle options, Activity activity, AccountManagerCallback<Bundle> callback, Handler handler)

アクティビティパラメータが問題を解決しました。

于 2012-07-07T16:43:03.570 に答える