无法从不同的应用程序获取AuthToken的自定义帐户

Mis*_*rdi 7 android auth-token android-authenticator android-account

我有两个使用相同帐户类型的应用.我希望当用户第一次打开第二个应用并且存在一个帐户时,会显示以下页面:

在此输入图像描述

但是当我运行这段代码时没有任何反应:

final AccountManagerFuture<Bundle> future = mAccountManager.getAuthToken(account, authTokenType, null, this, null, null);

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            Bundle bnd = future.getResult();

            final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN);
            showMessage((authtoken != null) ? "SUCCESS!\ntoken: " + authtoken : "FAIL");
            Log.d("udinic", "GetToken Bundle is " + bnd);
        } catch (Exception e) {
            e.printStackTrace();
            showMessage(e.getMessage());
        }
    }
}).start();
Run Code Online (Sandbox Code Playgroud)

当我从具有验证器的应用程序运行它时,上面的代码正常工作.当我在代码下面运行时,系统会生成一个通知,当我点击它时,会出现上面的图片.

final AccountManagerFuture<Bundle> future = mAccountManager
        .getAuthToken(account, authTokenType, null, true,
                null, handler);
Run Code Online (Sandbox Code Playgroud)

单击允许按钮可AuthToken正确返回.但是我希望在通话时看到授权许可页面(上图)getAuthToken,而不是点击通知.我怎样才能做到这一点?

Mis*_*rdi 1

我使用了这种方法而不是以前的方法,现在我看到了确认对话框:

accountManager.getAuthToken(account, AUTH_TOKEN_TYPE_FULL_ACCESS, null, true, new AccountManagerCallback<Bundle>() {
            @Override
            public void run(AccountManagerFuture<Bundle> future) {
                try {
                    Bundle bundle = future.getResult();
                    String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);

                } catch (OperationCanceledException | IOException | AuthenticatorException e) {

                }
            }
}, null);
Run Code Online (Sandbox Code Playgroud)

请注意,第二个应用程序必须具有不同的签名。如果两个应用程序具有相同的签名,则无需确认即可authToken检索。